get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 44330,
    "url": "https://patches.dpdk.org/api/patches/44330/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20180906161741.29327-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": "<20180906161741.29327-1-juhamatti.kuusisaari@coriant.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180906161741.29327-1-juhamatti.kuusisaari@coriant.com",
    "date": "2018-09-06T16:17:41",
    "name": "[v3] net/pcap: physical interface MAC address support",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "3d8246a63be2f8890255cf1d2ffda4da7742cae1",
    "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/20180906161741.29327-1-juhamatti.kuusisaari@coriant.com/mbox/",
    "series": [
        {
            "id": 1210,
            "url": "https://patches.dpdk.org/api/series/1210/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=1210",
            "date": "2018-09-06T16:17:41",
            "name": "[v3] net/pcap: physical interface MAC address support",
            "version": 3,
            "mbox": "https://patches.dpdk.org/series/1210/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/44330/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/44330/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 DBD16326D;\n\tThu,  6 Sep 2018 18:17:52 +0200 (CEST)",
            "from EUR03-AM5-obe.outbound.protection.outlook.com\n\t(mail-eopbgr30072.outbound.protection.outlook.com [40.107.3.72])\n\tby dpdk.org (Postfix) with ESMTP id BF0CB3256\n\tfor <dev@dpdk.org>; Thu,  6 Sep 2018 18:17:50 +0200 (CEST)",
            "from DB7PR04CA0006.eurprd04.prod.outlook.com (2603:10a6:10:12::19)\n\tby VI1PR0402MB2928.eurprd04.prod.outlook.com\n\t(2603:10a6:800:b7::18) with Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1101.17;\n\tThu, 6 Sep 2018 16:17:49 +0000",
            "from HE1EUR02FT021.eop-EUR02.prod.protection.outlook.com\n\t(2a01:111:f400:7e05::202) by DB7PR04CA0006.outlook.office365.com\n\t(2603:10a6:10:12::19) 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:17:48 +0000",
            "from usnapvlsmtp01.coriant.com (204.154.131.209) by\n\tHE1EUR02FT021.mail.protection.outlook.com (10.152.10.85) 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:17:47 +0000",
            "from super-tessie-2.tellabs.fi (lb03 [172.23.229.177])\n\tby usnapvlsmtp01.coriant.com (Postfix) with ESMTP id 3E4C2401FE;\n\tThu,  6 Sep 2018 11:17:45 -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=4YjPSv1MUOV8IrSc+YZtKXndwKkjjBpIFtPjGja6r9E=;\n\tb=RnrKTbRuHDi3h/l4vHVdk/fU/XLz6I2gOHRVPxPMjMTuPxMS/3nOYuWIj6eeLUNZGYr4SU0rQ2hkwLlk45bd98ql3KpByV/je5mCo3lsbFs03HiBgxISlCmjZZBbGy17qpcbyWkEDNWXjrFOT0CXR5bIxppuDFu00YxN/Gs37A8=",
        "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: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; \n\tEFV:NLI; SFV:NSPM;\n\tSFS:(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);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0402MB2928;\n\tH:usnapvlsmtp01.coriant.com; \n\tFPR:; SPF:Pass; LANG:en; PTR:InfoDomainNonexistent; MX:1; A:1; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; HE1EUR02FT021;\n\t1:oW0hndaW5sfy1y+j9aSHxzi4Cj1MO7XWFWv9XRucfLBPSUv2nNv//ge+cPGvYvKxJ+EVzjvrVwpbrLmVPt42KFmZI2k0ccdpfyEbBgSnVjXcXWTvrjKKeftZEW+3ZCpm",
            "1; VI1PR0402MB2928;\n\t3:TUvfUUKOqEQeV19RaLgA6I0cJJsskigPrx0PIPIJAnYvyBfmfUuxGyCI+4rwl8LQt5IFgHU/FD64PjkE8m/T+KlYlv8/nLjE8wZAxgx2KnUOOZgIbJV10OeUCgRiAuX1vu7cHmIqb+QrEl/Al03JckFNWZO2Fqg6lAifsYnyKYWFmg3vX5YvFUvdojByrIw4jIMyhM1gpglSE8kWihyTuciT3z6SD4hwzYFW4jrRsLsmlyGCgUdyBUV0Cv2cIrjB7yt7F8WH9bnNthCOGpc1FITbSdPR8wiBmfmZuDh8P5jqy38QWoLVtZ0S7qjn3Bh+nJ2HY/YCYuvbUKLovBcN39sO40SArmqqxg039ch4KTI=;\n\t25:RTWbdw/KCgGO4GfEV+nvf+pxTCO1LB5s1PFeYRt4vuKGoijTRLojo6Dxi+wQKC1KrUxatnK9GCs9IeI03M6xjt8rFCl5ClWaiF++mjAagQmjF1y2jaeRJq12FuDgLcUitjFc2bUFEO8hPp4pN1QCWFfZRcVDpr1hJA07ZDXhqt/bnO027wjuQux06E6jIpMfzlivMGUWKhEcq3zQ6qxazsNFgmyHj5lrwlR4udObmyLAiKRCIS/PQbeJlGcxMjU+IRlCj4721JUoZ0vhoy6kXLw1sEB+AnQyRbz9W8U0YFztel5/cNeH0fJt3/UppdvyfgKN9scq5zzmOr5EMWUjPw==",
            "1; VI1PR0402MB2928;\n\t31:W5oZxktdGeYzP0cQshGtdnqhM0MGGolPVeF/I2lxr+vT+hU0ifRYp1JULHz4COXL8PjOBhBLLjU1trZGuDCnmXgeeyJrUM0V7aQL4qV+ZTugwK/Rpv0f5Lmn3LCnFtjD6lOK/lGj+FlIoOGq4S2GtdI2E0CMIxeLom69z+3sS4D7sAKMbHcslPXvx1xZQM41C/H7dcYEcDn0zDMxyfU9r15P6VUzxfmdhvd2mAjoZ5g=;\n\t20:Cd3CLTG+M7GILl/qR3OyUkbOBWXaftaN0gVQjKhMavozfqKJZRhVEs0Rf2WhA75bKkyJWbMgQe7WkCue1hH4+wO+8/oVGVBBsSMJ0IQtPcRvl90px5BOPQvytMRBTTaw78BRYinm1xb4s27JxyZ7iHyWr5fzU0e2/yn4/v0AMeLg1LTRqESziHeZcXNpe3rm7hW9acaaOHFhX3tVHnzKcBkfcveOaaX6QsxSjalmpRjzIwX4IYAFRVRynfokbamOY8c3o63xoXRmaTLWY0pHupBIsmdCccWrwYtacq7lC2UVRYS/2iSRlO4/h4ZByXP9mixVzAx85Jkb92c+EPC6EVrhk6PavcsBT44Sov0UHjGbhcPesvIJYJJvy1b4E26rtLFyEammkl9hfcu19Hmsk2NEU3qqfzELXCf/H/LHt/QgU1fLxnW8qMB0FaCQfhvGNrMBGvDcqGXWWBZD8CKdpIFaX+ehkfqZ4RA93qF0nrfu2AhkTcrQNN98VCCllZu8Z9iuHEH8ZepJM7hixLsGxTfpDXQUWv7YHV448tO07v8EmHDF6hnW721mcz4E46GCn+GdPG24y+MuswPYZdH/Wq1JG/MzJTHN37h29Wcwh5g=",
            "1; VI1PR0402MB2928;\n\t4:OP8zX23OLup5D2fFguW2Lu+wutogN7XGdWTJxOVa3NqBwRk412loTb3WVuHCjvzfyqMRu4LDDoy7sY1hk30MpzXFiRhMkd890k9vyGZZRcmEUxd9/RXkZr2dXsIqWt2wbNjfDYzMZIN4MShxcTYQJEuhd/FERhjzQ2aoNeyipUsHRYTfLHiRqWdS/cDg0kT8qtvWJhg1UWsdu8rubQy3yTOGd/12NSRx/Bt/DQAdUEX2v/Xunk7cv2S7iHpg9Wjyu+b6WP2euE5fq3wM1xhAtn4Rg1hgUFUOmwFNUqQ+T8mgnKnlb6dlFTtllpweHaqg",
            "=?us-ascii?Q?1; VI1PR0402MB2928;\n\t23:jX6WZtDYlt8MTI6tcPBxSm2wwAJaQH4v8boqadt?=\n\tJwUq7Yjfm7crEhmctW7I9VPMjWilfon6WAyFPZi/t2cZqC7zln1DhdRst6Krz+skaJm7u1X8clWqggF7hy6MMIrrfdKR+zy4GNutoq1fs5Xk7WA18SfP6sHKD6TyL/736VIUX0Q3PLDC+V1rgMHMQEpnXF5hXL+MtiiDP6RxnfsRmLMyUKngMCXXRXYGeQA1qAc307q8YVgMGV1TV/LBqY+bJbWCNHdfsxDbe3XMwzcEVsEU0Zld2DWQR47H68g9MXfYCDZ8F6liC9c9k6RZ//BQDCQAReLZu7P0UqWCAntAPY7E5p/rCBVM+AIUZ2snPNb9rLFgRT418FFJxbPzrprDhtRytZjSiPq4ONgaFqTVexXrurs5ZpHo6Hv4vXD4WJZ4h37b8rUrZJB4+XZB83B786kJe5jS6jgEKY7h0CCHbEBwgL1J60lYJSVlzghy4LAwVs1UorAXSF5bYNehaY/33nkBROD08TAr7H5ujCQEE3v4ioyDCXMYfz6NXAhfmJbXT+OMsY8+FVHVwyIVh/EZ6yMPAXnMlJnWwMqzbc5YJJWzWsvS+JrZzGLCy/F+ELjZK6W2c/YfOhxZK2kb5je9NVVdDj8ZYeE1P8jEW5UTaa2DDgzDZcLYsbE+/sQY1iOQe0kon8/D0n4TyZR2iNiS6Anuj+79I6Y3ySP8YS6nhZkVIdVDqMhW7Vrvq8hdbTuCT/WOOEZS+ULUDpcDWrvLEKXR6lACNXfFbcfVphl5Z+bp517hwyd7oX1X3EBNzjykD65IiHy5h1wBt9h6B7y/fJQTRonLvYK8VVXAoFnXC1sF/PqtWv1IOHcM5UovmKofxyJqVOg9MBueyK1fdvyP6uuolc+oeCkyKzd3B2Y5F8LqH628Vi7yUWQ/kXbcJSmVpUywc1/pcVKL00vM8ANcXPg/RpxkqGCLCiubEez3FKNBfdghMskXZ9XEyjqLB2sTBNO04H5YzUsYe0Vfhht0kLJavLoURkMSz2O3UgQxwiv1UuDpDSYt0oH/LVuD41wq7/28KkgyhL1XFRqRDoeWNCZfe4cnHbaaK8sxXGENpNUXu0eHuiFHTiLcZlMMAE32y8CnWHgaPTcrrY0l1eW1RxQPC1Ue+Mi1m3glhu/0dB0outuMNhFIdszrc4meMGV0=",
            "1; VI1PR0402MB2928;\n\t6:i845D2CfOBc5tQoY4n+SLB+4IigB2iYzxXbOUFOx0u0FTLEn8cHBYTihkAsEjhBvPBlPij0+gbrVYNveqEX/gmTcnjKmnS57RSNYNW49wDjjVZRM4zcIjEJ9hDstJdGYTgC8GaRYxVoFMKcBQgqMIMMeH22GJBYfrpXxIUuui0BQmmosdy1BmwEZaYXPNTCi6U8WN8u/OYeKRUUxzYVNwoKvxZMzAa/ucgkwTwrfVAxsjvQzJvRsjFgnn5yQbWvrSThZU98eR40AGLUnGChwFgiKlQpWQYmF3oxMA4pKRfSoagmF09zFdCcxo1YF8QJIZJwZjtPJkAy7nIJFs7v+z7EooA31UYXix2oNQJCJkY08SkMe2BgJAKzLMk6AMjD+UU0VmD9cWknP8NXcq0SqU07psXIO+WMEz9O7prq1wNIwFQMQi8KHARjqefMkjeIshZrKu0YmC/1Vl8Ess5ho8Q==;\n\t5:n6WFC3VzQvy+wJJTIEVr5rPFE2wx4wGdd4p/jNkDxkWz8UW+fUlb03w0Fpk+Szh4HKFjFJgAHBQWGgIC9EOn/3UCK09KYJ7d3pzOUhb6SffaBnND0Da0mtXw4/kEK/pPWC8pYGy1h6JtlOeyfp7MG7NnbiMHrZWB0zE5nEchdb4=;\n\t7:Gz8ULCbKT6pehnlupw6fY/76nLuZSkE24s7cw33jnjWO9jHuQwH3+AHdZrUXCPOxX+xV18XHNmj5SbMedjG6vXUxK6VZGLroBflF+Yq+IGKcHJLIhvei2pGbHhCf7unjzo8F53SNQuNsjPn+7H7Y/FQMmvnhnrro17GziCE3Qrq/LzbxkpLXwdvgLGpUfjJs0OS13pOCkJfKN4m/OTIkpwAVlrwsHcpvWe4zjhyyTkrWih5kTSNVCAG81xoYy8yR"
        ],
        "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;\n\tRULEID:(7020095)(4652040)(8989137)(5600074)(711020)(4608076)(2017052603328)(7153060);\n\tSRVR:VI1PR0402MB2928; ",
        "X-MS-TrafficTypeDiagnostic": "VI1PR0402MB2928:",
        "X-Microsoft-Antispam-PRVS": "<VI1PR0402MB2928DAF3DE265556DCAF22979D010@VI1PR0402MB2928.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)(3002001)(10201501046)(3231311)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699016);\n\tSRVR:VI1PR0402MB2928; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0402MB2928; ",
        "X-Forefront-PRVS": "0787459938",
        "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==",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "coriant.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "06 Sep 2018 16:17:47.9372\n\t(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;\n\tIp=[204.154.131.209]; \n\tHelo=[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\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        | 117 +++++++++++++++++++++++--\n 2 files changed, 116 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..4b932291d 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,77 @@ 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\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+\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 +1031,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 +1041,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 +1049,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 +1068,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 +1094,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 +1122,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 +1190,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 +1234,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": [
        "v3"
    ]
}