get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 139215,
    "url": "http://patches.dpdk.org/api/patches/139215/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20240409170602.541658-2-stephen@networkplumber.org/",
    "project": {
        "id": 1,
        "url": "http://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": "<20240409170602.541658-2-stephen@networkplumber.org>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240409170602.541658-2-stephen@networkplumber.org",
    "date": "2024-04-09T17:05:02",
    "name": "[v4,1/2] eal: add functions to generate uuid values",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "5194b8dda9bbc998a99f8756ad375dc6f8c54ed8",
    "submitter": {
        "id": 27,
        "url": "http://patches.dpdk.org/api/people/27/?format=api",
        "name": "Stephen Hemminger",
        "email": "stephen@networkplumber.org"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20240409170602.541658-2-stephen@networkplumber.org/mbox/",
    "series": [
        {
            "id": 31712,
            "url": "http://patches.dpdk.org/api/series/31712/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=31712",
            "date": "2024-04-09T17:05:01",
            "name": "uuid: generator functions and unit test",
            "version": 4,
            "mbox": "http://patches.dpdk.org/series/31712/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/139215/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/139215/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 9FCC343E2C;\n\tTue,  9 Apr 2024 19:06:53 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id E4DBC4067B;\n\tTue,  9 Apr 2024 19:06:47 +0200 (CEST)",
            "from mail-pf1-f170.google.com (mail-pf1-f170.google.com\n [209.85.210.170])\n by mails.dpdk.org (Postfix) with ESMTP id E83154025D\n for <dev@dpdk.org>; Tue,  9 Apr 2024 19:06:06 +0200 (CEST)",
            "by mail-pf1-f170.google.com with SMTP id\n d2e1a72fcca58-6ed0938cd1dso3722683b3a.2\n for <dev@dpdk.org>; Tue, 09 Apr 2024 10:06:06 -0700 (PDT)",
            "from hermes.lan (204-195-96-226.wavecable.com. [204.195.96.226])\n by smtp.gmail.com with ESMTPSA id\n x25-20020aa784d9000000b006e6b52eb59asm8545673pfn.126.2024.04.09.10.06.05\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Tue, 09 Apr 2024 10:06:05 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1712682366;\n x=1713287166; darn=dpdk.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=E9YPCoYF/LY/FI4ixXLjxwdDHr40FFq/HZiODrp8OAg=;\n b=Ur8p4OBGVsWFexk5yfsfj4yf+CzDFk2BuH8SJylQMtQgXBx00n2ikRaR+NVdcMzVOh\n U3ifDHar58ljvq6ovQXK0GHLUPbVAG9FI76j3OHfLbq3mw/MHTeqCK8LqhxrVoKG9dqL\n 0dZW0/a/vEIMTRDvuG1dIAGycw3TkOm4qYWsXYs1ZyJ+orLIU4G0nvSjVuqzX0BCZ+Fl\n enhQC2BZvYWKy2q5HqEB1/Yu49NKbqswY+ClOG7nKnjgB2FvFPjfPVJB+AlMr+ZbZA0J\n ULf/WYVOdOdpaQdmeykfEfqx1mWjl2QSZQt9QGoh8lBhditNbvl/qS6522Cfm+c1Q5x+\n EUjw==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1712682366; x=1713287166;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc\n :subject:date:message-id:reply-to;\n bh=E9YPCoYF/LY/FI4ixXLjxwdDHr40FFq/HZiODrp8OAg=;\n b=VJyQeHCm/LAG9k1StngS1Byame2/c8g4fbTCL53hJDnoH1nIavw6FBvP8O8QBOeQ0z\n 0i8OwnfyZY2UmFL09JeCfE7k/JBymZ6Y0NP8ZO3g0v0DnFSKmhaLB4HxRxjSBmBYamR2\n r2Nn+SqFkAl6bTphw2fJfaNHMIvTA7qKdMo2CbPiYAl2mkI3fy+Jnj3SKx1yWiQtWQsP\n bBNzpzqi4DiwYJFmjPcxNA1QcCHRVC2CTHQj4qDKn1KrbiTk4bmEa8oxVu6ldfSRmLPT\n G5RZeK7KMPqO9X+RSXI8tQPqqGyM1eUrhAX0eHXXnQuCrQC6+m36vTyYClVnIuQcYqA+\n Qgjw==",
        "X-Gm-Message-State": "AOJu0YwxcQKNV1iCZU/oG1bSStO8xn6roeR9q+a5VXCvuTdRNpsgLc7K\n LZhu20aR8j4cXm5UPvK+ioxQgA6FGMsQhHi4cGp0Nv9FQnrygoheg/qHDhrz0cTeVvkWPb5AJdQ\n E",
        "X-Google-Smtp-Source": "\n AGHT+IHnBpRxUJPqi6+ZtzajcKM99MD86c9q/3zXMvkohnsg3KT1EW4rjlcUMZIUSesOmbG+Av+0Rw==",
        "X-Received": "by 2002:a05:6a00:218f:b0:6ed:e1c:102e with SMTP id\n h15-20020a056a00218f00b006ed0e1c102emr139082pfi.24.1712682366038;\n Tue, 09 Apr 2024 10:06:06 -0700 (PDT)",
        "From": "Stephen Hemminger <stephen@networkplumber.org>",
        "To": "dev@dpdk.org",
        "Cc": "Stephen Hemminger <stephen@networkplumber.org>",
        "Subject": "[PATCH v4 1/2] eal: add functions to generate uuid values",
        "Date": "Tue,  9 Apr 2024 10:05:02 -0700",
        "Message-ID": "<20240409170602.541658-2-stephen@networkplumber.org>",
        "X-Mailer": "git-send-email 2.43.0",
        "In-Reply-To": "<20240409170602.541658-1-stephen@networkplumber.org>",
        "References": "<20240403163432.437275-1-stephen@networkplumber.org>\n <20240409170602.541658-1-stephen@networkplumber.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "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"
    },
    "content": "Useful to be able to generate uuid values for tests or\nfor interaction with other subsystems as magic cookie.\nNaming and overall algorithm come from libuuid which is used\nby permission of original author.\n\nSigned-off-by: Stephen Hemminger <stephen@networkplumber.org>\n---\n lib/eal/common/eal_common_uuid.c | 56 ++++++++++++++++++++++++++++++++\n lib/eal/include/rte_uuid.h       | 26 +++++++++++++++\n lib/eal/version.map              |  4 +++\n 3 files changed, 86 insertions(+)",
    "diff": "diff --git a/lib/eal/common/eal_common_uuid.c b/lib/eal/common/eal_common_uuid.c\nindex 0a80bfbb38..a185ccb881 100644\n--- a/lib/eal/common/eal_common_uuid.c\n+++ b/lib/eal/common/eal_common_uuid.c\n@@ -3,12 +3,18 @@\n  */\n \n #include <stdio.h>\n+#include <stdbool.h>\n #include <string.h>\n #include <stdint.h>\n #include <stdlib.h>\n #include <ctype.h>\n+#include <time.h>\n \n+#include <rte_stdatomic.h>\n+#include <rte_random.h>\n+#include <rte_time.h>\n #include <rte_uuid.h>\n+#include <rte_os_shim.h>\n \n /* UUID packed form */\n struct uuid {\n@@ -165,3 +171,53 @@ void rte_uuid_unparse(const rte_uuid_t uu, char *out, size_t len)\n \t\tuuid.node[0], uuid.node[1], uuid.node[2],\n \t\tuuid.node[3], uuid.node[4], uuid.node[5]);\n }\n+\n+void rte_uuid_generate_random(rte_uuid_t out)\n+{\n+\tunion {\n+\t\tuint64_t words[2];\n+\t\trte_uuid_t uuid;\n+\t} buf;\n+\tstruct uuid uu;\n+\n+\t/* UUID is 128 bit */\n+\tbuf.words[0] = rte_rand();\n+\tbuf.words[1] = rte_rand();\n+\n+\t/* Mark these random bytes a version 4 random uuid */\n+\tuuid_unpack(buf.uuid, &uu);\n+\tuu.clock_seq = (uu.clock_seq & 0x3FFF) | 0x8000;\n+\tuu.time_hi_and_version = (uu.time_hi_and_version & 0x0FFF) | 0x4000;\n+\tuuid_pack(&uu, out);\n+}\n+\n+void rte_uuid_generate_time(rte_uuid_t out)\n+{\n+\tstruct uuid uu;\n+\tstruct timespec ts;\n+\tuint64_t ns, rnd;\n+\tstatic RTE_ATOMIC(uint16_t) sequence;\n+\n+\t/* The time value for UUID is 100ns since 15 October 1582 */\n+\tclock_gettime(CLOCK_REALTIME, &ts);\n+\n+\tns = ts.tv_nsec / 100;\n+\tns += (uint64_t) ts.tv_sec * (NSEC_PER_SEC / 100);\n+\tns += (((uint64_t) 0x01B21DD2) << 32) + 0x13814000;\n+\n+\tuu.time_low = (uint32_t) ns;\n+\tuu.time_mid = (uint16_t) (ns >> 32);\n+\tuu.time_hi_and_version = (uint16_t) (ns >> 48);\n+\tuu.time_hi_and_version = (uu.time_hi_and_version & 0x0FFF) | 0x4000;\n+\tuu.clock_seq = rte_atomic_fetch_add_explicit(&sequence, 1, rte_memory_order_relaxed);\n+\n+\trnd = rte_rand();\n+\tmemcpy(uu.node, &rnd, 6);\n+\t/*\n+\t * Follow the convention so that random node part\n+\t * will not match a valid MAC address,\n+\t */\n+\tuu.node[0] |= 0x1;\n+\n+\tuuid_pack(&uu, out);\n+}\ndiff --git a/lib/eal/include/rte_uuid.h b/lib/eal/include/rte_uuid.h\nindex cfefd4308a..5fe7d32d39 100644\n--- a/lib/eal/include/rte_uuid.h\n+++ b/lib/eal/include/rte_uuid.h\n@@ -18,6 +18,8 @@ extern \"C\" {\n #include <stddef.h>\n #include <string.h>\n \n+#include <rte_compat.h>\n+\n /**\n  * Struct describing a Universal Unique Identifier\n  */\n@@ -100,6 +102,30 @@ int\trte_uuid_parse(const char *in, rte_uuid_t uu);\n  */\n void\trte_uuid_unparse(const rte_uuid_t uu, char *out, size_t len);\n \n+/**\n+ * Generate a random uuid\n+ *\n+ * Uses high quality pseudo-random generator rte_rand() to generate a universal\n+ * unique identifier.\n+ *\n+ * @param uu\n+ *   Resulting UUID\n+ */\n+__rte_experimental\n+void   rte_uuid_generate_random(rte_uuid_t uu);\n+\n+/**\n+ * Generate a uuid based on time stamp.\n+ *\n+ * Uses the current time and a random Ethernet MAC address to generate a\n+ * universal unique identifier.\n+ *\n+ * @param uu\n+ *   Resulting UUID\n+ */\n+__rte_experimental\n+void   rte_uuid_generate_time(rte_uuid_t uu);\n+\n #ifdef __cplusplus\n }\n #endif\ndiff --git a/lib/eal/version.map b/lib/eal/version.map\nindex 3df50c3fbb..aca0d97c63 100644\n--- a/lib/eal/version.map\n+++ b/lib/eal/version.map\n@@ -396,6 +396,10 @@ EXPERIMENTAL {\n \n \t# added in 24.03\n \trte_vfio_get_device_info; # WINDOWS_NO_EXPORT\n+\n+\t# added in 24.07\n+\trte_uuid_generate_random;\n+\trte_uuid_generate_time;\n };\n \n INTERNAL {\n",
    "prefixes": [
        "v4",
        "1/2"
    ]
}