get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 140121,
    "url": "http://patchwork.dpdk.org/api/patches/140121/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20240514201436.2496-4-jspewock@iol.unh.edu/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<20240514201436.2496-4-jspewock@iol.unh.edu>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240514201436.2496-4-jspewock@iol.unh.edu",
    "date": "2024-05-14T20:14:35",
    "name": "[v1,3/4] dts: add methods for modifying MTU to testpmd shell",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "16f898230fa43de38c36323ed22aaa901b6932a0",
    "submitter": {
        "id": 2772,
        "url": "http://patchwork.dpdk.org/api/people/2772/?format=api",
        "name": "Jeremy Spewock",
        "email": "jspewock@iol.unh.edu"
    },
    "delegate": {
        "id": 1,
        "url": "http://patchwork.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20240514201436.2496-4-jspewock@iol.unh.edu/mbox/",
    "series": [
        {
            "id": 31928,
            "url": "http://patchwork.dpdk.org/api/series/31928/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=31928",
            "date": "2024-05-14T20:14:32",
            "name": "Add second scatter test case",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/31928/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/140121/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/140121/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 EC8004402B;\n\tTue, 14 May 2024 22:15:22 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 7CB9940608;\n\tTue, 14 May 2024 22:15:07 +0200 (CEST)",
            "from mail-pg1-f226.google.com (mail-pg1-f226.google.com\n [209.85.215.226])\n by mails.dpdk.org (Postfix) with ESMTP id C5D2B402EB\n for <dev@dpdk.org>; Tue, 14 May 2024 22:15:05 +0200 (CEST)",
            "by mail-pg1-f226.google.com with SMTP id\n 41be03b00d2f7-5f415fd71f8so4682331a12.3\n for <dev@dpdk.org>; Tue, 14 May 2024 13:15:05 -0700 (PDT)",
            "from postal.iol.unh.edu (postal.iol.unh.edu. [132.177.123.84])\n by smtp-relay.gmail.com with ESMTPS id\n d9443c01a7336-1ef0b9cce37sm3890935ad.20.2024.05.14.13.15.04\n (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);\n Tue, 14 May 2024 13:15:04 -0700 (PDT)",
            "from iol.unh.edu (unknown\n [IPv6:2606:4100:3880:1271:90f9:1b64:f6e6:867f])\n by postal.iol.unh.edu (Postfix) with ESMTP id 014EF605C373;\n Tue, 14 May 2024 16:15:04 -0400 (EDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=iol.unh.edu; s=unh-iol; t=1715717705; x=1716322505; 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=MvFGL8WBsjoDVlBxmU+Bv3MADnwlrIBrEUarWOJ4S9g=;\n b=DHLMhmfJaUcHUlf2tX5CxjVm0gYwzTO/NvUpfWa+a6Tj15PR4eguGQthSGYFjhX0XC\n GjMjrPOFRGOucTyONGNKuzGO3Il0FV9VUONqSUU778vB0nBE7/J+ruW+f6l7rioqMoyy\n Rb9UnF6tDfprZ+slrZpJMNaZ7Xc/6Pg8C5CNs=",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1715717705; x=1716322505;\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=MvFGL8WBsjoDVlBxmU+Bv3MADnwlrIBrEUarWOJ4S9g=;\n b=q2JonthumKGnxeRqG4BqpY1yBNuIpX4PQcgYpXA5SxKjv9fAb8nBP275LKt+ob0ZUt\n 4qCe7+M6wnMEER+hW9ik2x1KKIRTBrrigYug9wH5T1Oa0q/nNl1miBqUSj0Osr5F4OP5\n zrf8ghGs9hCWNUThbpfbYVU/Cahy7WELO9HZdC50jdSCEOTYQHPX14lIs6hBw9BYUG4C\n Mk/CC6yimtpAVCvDHW86f9IbjaQZNHem9MFWJXm9+p5Se1LtwnQEzVTS0iZymXZ146f4\n 9YThErWZTC/Bqrf6DUjfF1Bdr4G6LlZwVjlUq+kmECN6DJJXVL3xPSfeIJffp7ynXPVj\n XCJw==",
        "X-Gm-Message-State": "AOJu0YzxtVMc7JaYceCCCEDR40yDRMTvojTs8XDmJFiYBM0iyutR7NiA\n sEj8fa2ltnuRZ75KQ97lovndhoRNKuYjbenZsGzeohpeSeA/smrODa4LIPDFv7ZyBZGL2IeMYYm\n m2x+F0RDVtp3f6rR6cFgU8uKgRtyl+vog",
        "X-Google-Smtp-Source": "\n AGHT+IFw8p6qOy06wPqnXRI6CF5KRsJSd2UgjEVuax9MsnnfW/mcoNrkUC5jzfYrrkZxYAE8JLDZholQtOOB",
        "X-Received": "by 2002:a17:90a:bb89:b0:2b9:c7ad:c99f with SMTP id\n 98e67ed59e1d1-2b9c7adca08mr427528a91.9.1715717704957;\n Tue, 14 May 2024 13:15:04 -0700 (PDT)",
        "X-Relaying-Domain": "iol.unh.edu",
        "From": "jspewock@iol.unh.edu",
        "To": "yoan.picchi@foss.arm.com, Honnappa.Nagarahalli@arm.com,\n paul.szczepanek@arm.com, juraj.linkes@pantheon.tech, probb@iol.unh.edu,\n Luca.Vizzarro@arm.com, wathsala.vithanage@arm.com, thomas@monjalon.net",
        "Cc": "dev@dpdk.org,\n\tJeremy Spewock <jspewock@iol.unh.edu>",
        "Subject": "[PATCH v1 3/4] dts: add methods for modifying MTU to testpmd shell",
        "Date": "Tue, 14 May 2024 16:14:35 -0400",
        "Message-ID": "<20240514201436.2496-4-jspewock@iol.unh.edu>",
        "X-Mailer": "git-send-email 2.44.0",
        "In-Reply-To": "<20240514201436.2496-1-jspewock@iol.unh.edu>",
        "References": "<20240514201436.2496-1-jspewock@iol.unh.edu>",
        "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": "From: Jeremy Spewock <jspewock@iol.unh.edu>\n\nThere are methods within DTS currently that support updating the MTU of\nports on a node, but the methods for doing this in a linux session rely\non the ip command and the port being bound to the kernel driver. Since\ntest suites are run while bound to the driver for DPDK, there needs to\nbe a way to modify the value while bound to said driver as well. This is\ndone by using testpmd to modify the MTU.\n\nSigned-off-by: Jeremy Spewock <jspewock@iol.unh.edu>\n---\n dts/framework/remote_session/testpmd_shell.py | 68 +++++++++++++++++++\n 1 file changed, 68 insertions(+)",
    "diff": "diff --git a/dts/framework/remote_session/testpmd_shell.py b/dts/framework/remote_session/testpmd_shell.py\nindex 33b3e7c5a3..4e608998f9 100644\n--- a/dts/framework/remote_session/testpmd_shell.py\n+++ b/dts/framework/remote_session/testpmd_shell.py\n@@ -227,6 +227,74 @@ def set_forward_mode(self, mode: TestPmdForwardingModes, verify: bool = True):\n                 f\"Test pmd failed to set fwd mode to {mode.value}\"\n             )\n \n+    def _stop_port(self, port_id: int, verify: bool = True) -> None:\n+        \"\"\"Stop port `port_id` in testpmd.\n+\n+        Depending on the PMD, the port may need to be stopped before configuration can take place.\n+        This method wraps the command needed to properly stop ports and take their link down.\n+\n+        Args:\n+            port_id: ID of the port to take down.\n+            verify: If :data:`True` the output will be scanned in an attempt to verify that the\n+                stopping of ports was successful. Defaults to True.\n+\n+        Raises:\n+            InteractiveCommandExecutionError: If `verify` is :data:'True` and the port did not\n+                successfully stop.\n+        \"\"\"\n+        stop_port_output = self.send_command(f\"port stop {port_id}\")\n+        if verify and (\"Done\" not in stop_port_output):\n+            self._logger.debug(f\"Failed to stop port {port_id}. Output was:\\n{stop_port_output}\")\n+            raise InteractiveCommandExecutionError(f\"Test pmd failed to stop port {port_id}.\")\n+\n+    def _start_port(self, port_id: int, verify: bool = True) -> None:\n+        \"\"\"Start port `port_id` in testpmd.\n+\n+        Because the port may need to be stopped to make some configuration changes, it naturally\n+        follows that it will need to be started again once those changes have been made.\n+\n+        Args:\n+            port_id: ID of the port to start.\n+            verify: If :data:`True` the output will be scanned in an attempt to verify that the\n+                port came back up without error. Defaults to True.\n+\n+        Raises:\n+            InteractiveCommandExecutionError: If `verify` is :data:`True` and the port did not come\n+                back up.\n+        \"\"\"\n+        start_port_output = self.send_command(f\"port start {port_id}\")\n+        if verify and (\"Done\" not in start_port_output):\n+            self._logger.debug(f\"Failed to start port {port_id}. Output was:\\n{start_port_output}\")\n+            raise InteractiveCommandExecutionError(f\"Test pmd failed to start port {port_id}.\")\n+\n+    def set_port_mtu(self, port_id: int, mtu: int, verify: bool = True) -> None:\n+        \"\"\"Change the MTU of a port using testpmd.\n+\n+        Some PMDs require that the port be stopped before changing the MTU, and it does no harm to\n+        stop the port before configuring in cases where it isn't required, so we first stop ports,\n+        then update the MTU, then start the ports again afterwards.\n+\n+        Args:\n+            port_id: ID of the port to adjust the MTU on.\n+            mtu: Desired value for the MTU to be set to.\n+            verify: If `verify` is :data:`True` then the output will be scanned in an attempt to\n+                verify that the mtu was properly set on the port. Defaults to True.\n+\n+        Raises:\n+            InteractiveCommandExecutionError: If `verify` is :data:`True` and the MTU was not\n+                properly updated on the port matching `port_id`.\n+        \"\"\"\n+        self._stop_port(port_id, verify)\n+        set_mtu_output = self.send_command(f\"port config mtu {port_id} {mtu}\")\n+        self._start_port(port_id, verify)\n+        if verify and (f\"MTU: {mtu}\" not in self.send_command(f\"show port info {port_id}\")):\n+            self._logger.debug(\n+                f\"Failed to set mtu to {mtu} on port {port_id}.\" f\" Output was:\\n{set_mtu_output}\"\n+            )\n+            raise InteractiveCommandExecutionError(\n+                f\"Test pmd failed to update mtu of port {port_id} to {mtu}\"\n+            )\n+\n     def _close(self) -> None:\n         \"\"\"Overrides :meth:`~.interactive_shell.close`.\"\"\"\n         self.send_command(\"quit\", \"\")\n",
    "prefixes": [
        "v1",
        "3/4"
    ]
}