get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 91611,
    "url": "https://patches.dpdk.org/api/patches/91611/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210415221055.1575-3-dmitry.kozliuk@gmail.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": "<20210415221055.1575-3-dmitry.kozliuk@gmail.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210415221055.1575-3-dmitry.kozliuk@gmail.com",
    "date": "2021-04-15T22:10:54",
    "name": "[v4,2/3] net/pcap: move OS-dependent code to separate files",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "db4ae969236d0d37589161bcd3bfdddd6e953c3e",
    "submitter": {
        "id": 1581,
        "url": "https://patches.dpdk.org/api/people/1581/?format=api",
        "name": "Dmitry Kozlyuk",
        "email": "dmitry.kozliuk@gmail.com"
    },
    "delegate": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20210415221055.1575-3-dmitry.kozliuk@gmail.com/mbox/",
    "series": [
        {
            "id": 16427,
            "url": "https://patches.dpdk.org/api/series/16427/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=16427",
            "date": "2021-04-15T22:10:52",
            "name": "net/pcap: build on Windows",
            "version": 4,
            "mbox": "https://patches.dpdk.org/series/16427/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/91611/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/91611/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 7D331A0C40;\n\tFri, 16 Apr 2021 00:11:16 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id AA1FE1624B4;\n\tFri, 16 Apr 2021 00:11:08 +0200 (CEST)",
            "from mail-lf1-f42.google.com (mail-lf1-f42.google.com\n [209.85.167.42])\n by mails.dpdk.org (Postfix) with ESMTP id 6F5651624AD\n for <dev@dpdk.org>; Fri, 16 Apr 2021 00:11:06 +0200 (CEST)",
            "by mail-lf1-f42.google.com with SMTP id x20so11304884lfu.6\n for <dev@dpdk.org>; Thu, 15 Apr 2021 15:11:06 -0700 (PDT)",
            "from localhost.localdomain (broadband-37-110-65-23.ip.moscow.rt.ru.\n [37.110.65.23])\n by smtp.gmail.com with ESMTPSA id d17sm105591lfb.148.2021.04.15.15.11.04\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 15 Apr 2021 15:11:05 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n h=from:to:cc:subject:date:message-id:in-reply-to:references\n :mime-version:content-transfer-encoding;\n bh=Lw0tS/1yFi5trEb64OXv9LUHM3W9iHW/cptYOk8BOxc=;\n b=a6fwL7uRuLAl8wwkpbnxEpHxExoO3D0XQlnlDdVNUU47pHEVS5Me7ZnvJwKHyfxa+b\n YNTG+Y1PXLH+sloAmhsgNgSAMF9+XdJYeHijPxLCr12a7m0HqJiS6GNH/7vcaUiOEsjO\n LBU4J2CUyGaKbAZjVWnJLxWtCYkvC0FraU/JL2r2fMP1D02FI77iq5qlq7YqXFKSP7lU\n wwy2+ers0syko38f6qWC5a57r4A1foCoK12I6JR9S+C6XXupc/+Bu2zY0pvM98ztT5Bp\n aXQQVr79SDxxClpbVCGwhvhmCsInGydLqSVIlhFt/IkmfafDCcclup4zC8x0BHLZxgPR\n FVZw==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20161025;\n h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n :references:mime-version:content-transfer-encoding;\n bh=Lw0tS/1yFi5trEb64OXv9LUHM3W9iHW/cptYOk8BOxc=;\n b=NnIDpItfJaq7SS81Vk2Y8xP05X+sfFOxqUjW4x+FuBPrw+Jqra+lyWqKswUx/qriBb\n Y+tufzRAf7Bq6traDIVQM83c/5tMe/uwvr7sYkkibLUts3ieG4TODcQ2UhdV91K/hTIC\n Vikyjs5LfF3k7zt8g422J4R9KrOLnmrRjOSB85n4oYqdHH1FUI5pcAL8W0O+HNh7zo0c\n hDI1P3SjnLf70/XBWDdgI5yCQU4GG8wgL6OxNH/nrIQYXaDrIV6ueUqUFNJNZyGlhVUF\n AFAudMyxef2Yp6yS9tW7R8habWXiz49yQKjIEct3nMb+tIpKL1nxQF32+a0LCtQ8L4dZ\n /uQA==",
        "X-Gm-Message-State": "AOAM532+kwADQ34bl9t5jhM1HfnA+Zk4rGA1oZScQUwtIsTu+Bm0bZIR\n IOM5E3nz8+2fEF7ENNQr90Y48AO0msaUEEgR",
        "X-Google-Smtp-Source": "\n ABdhPJzVJXgfNuJEzXIm6CySg1qETjeki3MiMce9kBOsNbD8Lwchi472K8IFzVlAYpHOwPw2aJRDdw==",
        "X-Received": "by 2002:ac2:4115:: with SMTP id b21mr377004lfi.537.1618524665632;\n Thu, 15 Apr 2021 15:11:05 -0700 (PDT)",
        "From": "Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>",
        "To": "dev@dpdk.org",
        "Cc": "Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>,\n Ferruh Yigit <ferruh.yigit@intel.com>",
        "Date": "Fri, 16 Apr 2021 01:10:54 +0300",
        "Message-Id": "<20210415221055.1575-3-dmitry.kozliuk@gmail.com>",
        "X-Mailer": "git-send-email 2.29.3",
        "In-Reply-To": "<20210415221055.1575-1-dmitry.kozliuk@gmail.com>",
        "References": "<20210324005008.24705-1-dmitry.kozliuk@gmail.com>\n <20210415221055.1575-1-dmitry.kozliuk@gmail.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v4 2/3] net/pcap: move OS-dependent code to\n separate files",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <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 <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "PCAP PMD queries interface information differently for Linux and\nFreeBSD, OS-specific code is guarded by #ifdef. This PMD also depends on\nPOSIX bits, namely gettimeofday() and NAME_MAX.\n\nMove OS-dependent code to separate files.\nReplace POSIX bits with DPDK equivalents.\nRename rte_eth_pcap.c to pcap_ethdev.c, like it is in most other PMDs.\n\nSigned-off-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>\nReviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>\n---\n drivers/net/pcap/meson.build                  |   5 +-\n .../pcap/{rte_eth_pcap.c => pcap_ethdev.c}    | 104 +++---------------\n drivers/net/pcap/pcap_osdep.h                 |  13 +++\n drivers/net/pcap/pcap_osdep_freebsd.c         |  59 ++++++++++\n drivers/net/pcap/pcap_osdep_linux.c           |  42 +++++++\n 5 files changed, 136 insertions(+), 87 deletions(-)\n rename drivers/net/pcap/{rte_eth_pcap.c => pcap_ethdev.c} (95%)\n create mode 100644 drivers/net/pcap/pcap_osdep.h\n create mode 100644 drivers/net/pcap/pcap_osdep_freebsd.c\n create mode 100644 drivers/net/pcap/pcap_osdep_linux.c",
    "diff": "diff --git a/drivers/net/pcap/meson.build b/drivers/net/pcap/meson.build\nindex b65d91e70a..26b6066990 100644\n--- a/drivers/net/pcap/meson.build\n+++ b/drivers/net/pcap/meson.build\n@@ -11,5 +11,8 @@ if not dpdk_conf.has('RTE_PORT_PCAP')\n \tbuild = false\n \treason = 'missing dependency, \"libpcap\"'\n endif\n-sources = files('rte_eth_pcap.c')\n+sources = files(\n+\t'pcap_ethdev.c',\n+\t'pcap_osdep_@0@.c'.format(exec_env),\n+)\n ext_deps += pcap_dep\ndiff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/pcap_ethdev.c\nsimilarity index 95%\nrename from drivers/net/pcap/rte_eth_pcap.c\nrename to drivers/net/pcap/pcap_ethdev.c\nindex 28a5027315..4ac594eeca 100644\n--- a/drivers/net/pcap/rte_eth_pcap.c\n+++ b/drivers/net/pcap/pcap_ethdev.c\n@@ -6,16 +6,6 @@\n \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(RTE_EXEC_ENV_FREEBSD)\n-#include <sys/sysctl.h>\n-#include <net/if_dl.h>\n-#endif\n-\n #include <pcap.h>\n \n #include <rte_cycles.h>\n@@ -25,7 +15,8 @@\n #include <rte_malloc.h>\n #include <rte_mbuf.h>\n #include <rte_bus_vdev.h>\n-#include <rte_string_fns.h>\n+\n+#include \"pcap_osdep.h\"\n \n #define RTE_ETH_PCAP_SNAPSHOT_LEN 65535\n #define RTE_ETH_PCAP_SNAPLEN RTE_ETHER_MAX_JUMBO_FRAME_LEN\n@@ -46,7 +37,7 @@\n #define RTE_PMD_PCAP_MAX_QUEUES 16\n \n static char errbuf[PCAP_ERRBUF_SIZE];\n-static struct timeval start_time;\n+static struct timespec start_time;\n static uint64_t start_cycles;\n static uint64_t hz;\n static uint8_t iface_idx;\n@@ -354,17 +345,21 @@ eth_null_rx(void *queue __rte_unused,\n \n #define NSEC_PER_SEC\t1000000000L\n \n+/*\n+ * This function stores nanoseconds in `tv_usec` field of `struct timeval`,\n+ * because `ts` goes directly to nanosecond-precision dump.\n+ */\n static inline void\n calculate_timestamp(struct timeval *ts) {\n \tuint64_t cycles;\n-\tstruct timeval cur_time;\n+\tstruct timespec cur_time;\n \n \tcycles = rte_get_timer_cycles() - start_cycles;\n \tcur_time.tv_sec = cycles / hz;\n-\tcur_time.tv_usec = (cycles % hz) * NSEC_PER_SEC / hz;\n+\tcur_time.tv_nsec = (cycles % hz) * NSEC_PER_SEC / hz;\n \n \tts->tv_sec = start_time.tv_sec + cur_time.tv_sec;\n-\tts->tv_usec = start_time.tv_usec + cur_time.tv_usec;\n+\tts->tv_usec = start_time.tv_nsec + cur_time.tv_nsec;\n \tif (ts->tv_usec >= NSEC_PER_SEC) {\n \t\tts->tv_usec -= NSEC_PER_SEC;\n \t\tts->tv_sec += 1;\n@@ -883,7 +878,7 @@ eth_rx_queue_setup(struct rte_eth_dev *dev,\n \n \tif (internals->infinite_rx) {\n \t\tstruct pmd_process_private *pp;\n-\t\tchar ring_name[NAME_MAX];\n+\t\tchar ring_name[RTE_RING_NAMESIZE];\n \t\tstatic uint32_t ring_number;\n \t\tuint64_t pcap_pkt_count = 0;\n \t\tstruct rte_mbuf *bufs[1];\n@@ -1261,84 +1256,20 @@ static int\n eth_pcap_update_mac(const char *if_name, struct rte_eth_dev *eth_dev,\n \t\tconst unsigned int numa_node)\n {\n-#if defined(RTE_EXEC_ENV_LINUX)\n \tvoid *mac_addrs;\n-\tstruct ifreq ifr;\n-\tint if_fd = socket(AF_INET, SOCK_DGRAM, 0);\n-\n-\tif (if_fd == -1)\n-\t\treturn -1;\n+\tstruct rte_ether_addr mac;\n \n-\trte_strscpy(ifr.ifr_name, if_name, sizeof(ifr.ifr_name));\n-\tif (ioctl(if_fd, SIOCGIFHWADDR, &ifr)) {\n-\t\tclose(if_fd);\n+\tif (osdep_iface_mac_get(if_name, &mac) < 0)\n \t\treturn -1;\n-\t}\n \n \tmac_addrs = rte_zmalloc_socket(NULL, RTE_ETHER_ADDR_LEN, 0, numa_node);\n-\tif (!mac_addrs) {\n-\t\tclose(if_fd);\n+\tif (mac_addrs == NULL)\n \t\treturn -1;\n-\t}\n \n \tPMD_LOG(INFO, \"Setting phy MAC for %s\", if_name);\n+\trte_memcpy(mac_addrs, mac.addr_bytes, RTE_ETHER_ADDR_LEN);\n \teth_dev->data->mac_addrs = mac_addrs;\n-\trte_memcpy(eth_dev->data->mac_addrs[0].addr_bytes,\n-\t\t\tifr.ifr_hwaddr.sa_data, RTE_ETHER_ADDR_LEN);\n-\n-\tclose(if_fd);\n-\n-\treturn 0;\n-\n-#elif defined(RTE_EXEC_ENV_FREEBSD)\n-\tvoid *mac_addrs;\n-\tstruct if_msghdr *ifm;\n-\tstruct sockaddr_dl *sdl;\n-\tint mib[6];\n-\tsize_t len = 0;\n-\tchar *buf;\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 -1;\n-\n-\tif (len == 0)\n-\t\treturn -1;\n-\n-\tbuf = rte_malloc(NULL, len, 0);\n-\tif (!buf)\n-\t\treturn -1;\n-\n-\tif (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {\n-\t\trte_free(buf);\n-\t\treturn -1;\n-\t}\n-\tifm = (struct if_msghdr *)buf;\n-\tsdl = (struct sockaddr_dl *)(ifm + 1);\n-\n-\tmac_addrs = rte_zmalloc_socket(NULL, RTE_ETHER_ADDR_LEN, 0, numa_node);\n-\tif (!mac_addrs) {\n-\t\trte_free(buf);\n-\t\treturn -1;\n-\t}\n-\n-\tPMD_LOG(INFO, \"Setting phy MAC for %s\", if_name);\n-\teth_dev->data->mac_addrs = mac_addrs;\n-\trte_memcpy(eth_dev->data->mac_addrs[0].addr_bytes,\n-\t\t\tLLADDR(sdl), RTE_ETHER_ADDR_LEN);\n-\n-\trte_free(buf);\n-\n \treturn 0;\n-#else\n-\treturn -1;\n-#endif\n }\n \n static int\n@@ -1400,7 +1331,8 @@ eth_from_pcaps(struct rte_vdev_device *vdev,\n \tinternals->single_iface = single_iface;\n \n \tif (single_iface) {\n-\t\tinternals->if_index = if_nametoindex(rx_queues->queue[0].name);\n+\t\tinternals->if_index =\n+\t\t\tosdep_iface_index_get(rx_queues->queue[0].name);\n \n \t\t/* phy_mac arg is applied only only if \"iface\" devarg is provided */\n \t\tif (rx_queues->phy_mac) {\n@@ -1453,7 +1385,7 @@ pmd_pcap_probe(struct rte_vdev_device *dev)\n \tname = rte_vdev_device_name(dev);\n \tPMD_LOG(INFO, \"Initializing pmd_pcap for %s\", name);\n \n-\tgettimeofday(&start_time, NULL);\n+\ttimespec_get(&start_time, TIME_UTC);\n \tstart_cycles = rte_get_timer_cycles();\n \thz = rte_get_timer_hz();\n \ndiff --git a/drivers/net/pcap/pcap_osdep.h b/drivers/net/pcap/pcap_osdep.h\nnew file mode 100644\nindex 0000000000..9de422ab8d\n--- /dev/null\n+++ b/drivers/net/pcap/pcap_osdep.h\n@@ -0,0 +1,13 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright (c) 2021 Dmitry Kozlyuk\n+ */\n+\n+#ifndef _RTE_PCAP_OSDEP_\n+#define _RTE_PCAP_OSDEP_\n+\n+#include <rte_ether.h>\n+\n+int osdep_iface_index_get(const char *name);\n+int osdep_iface_mac_get(const char *name, struct rte_ether_addr *mac);\n+\n+#endif\ndiff --git a/drivers/net/pcap/pcap_osdep_freebsd.c b/drivers/net/pcap/pcap_osdep_freebsd.c\nnew file mode 100644\nindex 0000000000..20556b3e92\n--- /dev/null\n+++ b/drivers/net/pcap/pcap_osdep_freebsd.c\n@@ -0,0 +1,59 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2010-2016 Intel Corporation.\n+ * Copyright(c) 2014 6WIND S.A.\n+ * All rights reserved.\n+ */\n+\n+#include <net/if.h>\n+#include <net/if_dl.h>\n+#include <sys/sysctl.h>\n+\n+#include <rte_malloc.h>\n+#include <rte_memcpy.h>\n+\n+#include \"pcap_osdep.h\"\n+\n+int\n+osdep_iface_index_get(const char *name)\n+{\n+\treturn if_nametoindex(name);\n+}\n+\n+int\n+osdep_iface_mac_get(const char *if_name, struct rte_ether_addr *mac)\n+{\n+\tstruct if_msghdr *ifm;\n+\tstruct sockaddr_dl *sdl;\n+\tint mib[6];\n+\tsize_t len = 0;\n+\tchar *buf;\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 -1;\n+\n+\tif (len == 0)\n+\t\treturn -1;\n+\n+\tbuf = rte_malloc(NULL, len, 0);\n+\tif (!buf)\n+\t\treturn -1;\n+\n+\tif (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {\n+\t\trte_free(buf);\n+\t\treturn -1;\n+\t}\n+\tifm = (struct if_msghdr *)buf;\n+\tsdl = (struct sockaddr_dl *)(ifm + 1);\n+\n+\trte_memcpy(mac->addr_bytes, LLADDR(sdl), RTE_ETHER_ADDR_LEN);\n+\n+\trte_free(buf);\n+\treturn 0;\n+}\ndiff --git a/drivers/net/pcap/pcap_osdep_linux.c b/drivers/net/pcap/pcap_osdep_linux.c\nnew file mode 100644\nindex 0000000000..97033f57c5\n--- /dev/null\n+++ b/drivers/net/pcap/pcap_osdep_linux.c\n@@ -0,0 +1,42 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2010-2016 Intel Corporation.\n+ * Copyright(c) 2014 6WIND S.A.\n+ * All rights reserved.\n+ */\n+\n+#include <net/if.h>\n+#include <sys/ioctl.h>\n+#include <sys/socket.h>\n+#include <unistd.h>\n+\n+#include <rte_memcpy.h>\n+#include <rte_string_fns.h>\n+\n+#include \"pcap_osdep.h\"\n+\n+int\n+osdep_iface_index_get(const char *name)\n+{\n+\treturn if_nametoindex(name);\n+}\n+\n+int\n+osdep_iface_mac_get(const char *if_name, struct rte_ether_addr *mac)\n+{\n+\tstruct ifreq ifr;\n+\tint if_fd = socket(AF_INET, SOCK_DGRAM, 0);\n+\n+\tif (if_fd == -1)\n+\t\treturn -1;\n+\n+\trte_strscpy(ifr.ifr_name, if_name, sizeof(ifr.ifr_name));\n+\tif (ioctl(if_fd, SIOCGIFHWADDR, &ifr)) {\n+\t\tclose(if_fd);\n+\t\treturn -1;\n+\t}\n+\n+\trte_memcpy(mac->addr_bytes, ifr.ifr_hwaddr.sa_data, RTE_ETHER_ADDR_LEN);\n+\n+\tclose(if_fd);\n+\treturn 0;\n+}\n",
    "prefixes": [
        "v4",
        "2/3"
    ]
}