get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 134052,
    "url": "http://patchwork.dpdk.org/api/patches/134052/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20231109232223.25644-7-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": "<20231109232223.25644-7-jspewock@iol.unh.edu>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20231109232223.25644-7-jspewock@iol.unh.edu",
    "date": "2023-11-09T23:20:15",
    "name": "[v2,5/7] dts: add optional packet filtering to scapy sniffer",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "3bc62b5f2a690198626aefaeb6d609b47abedfe9",
    "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/20231109232223.25644-7-jspewock@iol.unh.edu/mbox/",
    "series": [
        {
            "id": 30232,
            "url": "http://patchwork.dpdk.org/api/series/30232/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=30232",
            "date": "2023-11-09T23:20:10",
            "name": "dts: Port scatter suite over",
            "version": 2,
            "mbox": "http://patchwork.dpdk.org/series/30232/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/134052/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/134052/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 12264432EC;\n\tFri, 10 Nov 2023 00:23:40 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 83A7A42D7F;\n\tFri, 10 Nov 2023 00:23:36 +0100 (CET)",
            "from mail-yb1-f227.google.com (mail-yb1-f227.google.com\n [209.85.219.227])\n by mails.dpdk.org (Postfix) with ESMTP id 8DA2542D78\n for <dev@dpdk.org>; Fri, 10 Nov 2023 00:23:34 +0100 (CET)",
            "by mail-yb1-f227.google.com with SMTP id\n 3f1490d57ef6-da2b9234a9fso1574634276.3\n for <dev@dpdk.org>; Thu, 09 Nov 2023 15:23:34 -0800 (PST)",
            "from postal.iol.unh.edu (postal.iol.unh.edu.\n [2606:4100:3880:1234::84]) by smtp-relay.gmail.com with ESMTPS id\n v98-20020a25abeb000000b00d9cb2d83caasm1113231ybi.2.2023.11.09.15.23.33\n (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);\n Thu, 09 Nov 2023 15:23:33 -0800 (PST)",
            "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 98B8B605C318;\n Thu,  9 Nov 2023 18:23:33 -0500 (EST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=iol.unh.edu; s=unh-iol; t=1699572214; x=1700177014; 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=hdJVf3ypWMnb9Qt4IiEySc5/AHylOmI4+9ZLJPRV+8A=;\n b=jts/N+FP1c7zzRqad+GRA5C2YA3IlTPil7SgRerDoEjJbN3lQ5WTO6/PGrdpPjo2T4\n q9C+KDJaD6NQkv9NfUsBfzjM7cr7ckhpm3r78zQ7+BSi1EgJAieS+MQPQ8oHTrovd7xp\n EUoaW1VtCMH6ZzHzMWfAjAzx/N4NCRBipFL3g=",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1699572214; x=1700177014;\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=hdJVf3ypWMnb9Qt4IiEySc5/AHylOmI4+9ZLJPRV+8A=;\n b=gI0OTc26I/sLfeuqmFRA0rGWTLiE9pGCPMNol+c/+tW5pT6WzBbkR3kOtVoYmE5hyj\n dfoS5ldaa0q3Ur2UudKjMWZrxh8Yb3YrBI1qwnkbjF5TZa45YIyxw9/SnLAKT6wuxmBk\n BKZROlneH+DcTlmZeYU9lajs/Mz/Trgg+aVMlZHLX2ypAry4pJA6KO5V3uILdBdmiW6f\n sAHk3LqIB57xv0UocM84dT9X4Wc7B+qOhVtoJKxbSpVYO5Z+PGKMR98ZogPWj/bLDipG\n 1cEmE9JKM5ekLcKhVgkrGgWykaJ3m90lDerGbNkANt6YXd4QY7gTlR5C8JFX+ouPQ/KE\n qOeg==",
        "X-Gm-Message-State": "AOJu0YzKXjPK79b/hDSnWSLfr/qVqmo1qdNpBPEp8aOAAN0Fg4HnlbMU\n TaEPs/AkHEpC4d7zy9FoRCkvrYdFSZZqyzKd9bplaX3vAC0hyqTeIWTxJQAs9EzgUw==",
        "X-Google-Smtp-Source": "\n AGHT+IEvK071wNhSJZ5Y/Y9imaewne8KSM6YJYX+TNk5JiphN14MpCeCdSqGOyiVlAFwuGHZqTYCLkyw+Zu9",
        "X-Received": "by 2002:a25:6953:0:b0:da2:b499:f815 with SMTP id\n e80-20020a256953000000b00da2b499f815mr6968640ybc.30.1699572213995;\n Thu, 09 Nov 2023 15:23:33 -0800 (PST)",
        "X-Relaying-Domain": "iol.unh.edu",
        "From": "jspewock@iol.unh.edu",
        "To": "Honnappa.Nagarahalli@arm.com, juraj.linkes@pantheon.tech,\n thomas@monjalon.net, wathsala.vithanage@arm.com, probb@iol.unh.edu,\n paul.szczepanek@arm.com, yoan.picchi@foss.arm.com, ferruh.yigit@amd.com,\n andrew.rybchenko@oktetlabs.ru",
        "Cc": "dev@dpdk.org,\n\tJeremy Spewock <jspewock@iol.unh.edu>",
        "Subject": "[PATCH v2 5/7] dts: add optional packet filtering to scapy sniffer",
        "Date": "Thu,  9 Nov 2023 18:20:15 -0500",
        "Message-ID": "<20231109232223.25644-7-jspewock@iol.unh.edu>",
        "X-Mailer": "git-send-email 2.42.0",
        "In-Reply-To": "<20231109232223.25644-2-jspewock@iol.unh.edu>",
        "References": "<20231109232223.25644-2-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\nAdded the options to filter out LLDP and ARP packets when\nsniffing for packets with scapy. This was done using BPF filters to\nensure that the noise these packets provide does not interfere with test\ncases.\n\nSigned-off-by: Jeremy Spewock <jspewock@iol.unh.edu>\n---\n dts/framework/test_suite.py                         | 13 +++++++++++--\n .../testbed_model/capturing_traffic_generator.py    | 12 +++++++++++-\n dts/framework/testbed_model/scapy.py                | 11 ++++++++++-\n dts/framework/testbed_model/tg_node.py              |  4 +++-\n 4 files changed, 35 insertions(+), 5 deletions(-)",
    "diff": "diff --git a/dts/framework/test_suite.py b/dts/framework/test_suite.py\nindex 3b890c0451..3222f172f3 100644\n--- a/dts/framework/test_suite.py\n+++ b/dts/framework/test_suite.py\n@@ -152,7 +152,11 @@ def _configure_ipv4_forwarding(self, enable: bool) -> None:\n         self.sut_node.configure_ipv4_forwarding(enable)\n \n     def send_packet_and_capture(\n-        self, packet: Packet, duration: float = 1\n+        self,\n+        packet: Packet,\n+        duration: float = 1,\n+        no_lldp: bool = True,\n+        no_arp: bool = True,\n     ) -> list[Packet]:\n         \"\"\"\n         Send a packet through the appropriate interface and\n@@ -162,7 +166,12 @@ def send_packet_and_capture(\n         \"\"\"\n         packet = self._adjust_addresses(packet)\n         return self.tg_node.send_packet_and_capture(\n-            packet, self._tg_port_egress, self._tg_port_ingress, duration\n+            packet,\n+            self._tg_port_egress,\n+            self._tg_port_ingress,\n+            duration,\n+            no_lldp,\n+            no_arp,\n         )\n \n     def get_expected_packet(self, packet: Packet) -> Packet:\ndiff --git a/dts/framework/testbed_model/capturing_traffic_generator.py b/dts/framework/testbed_model/capturing_traffic_generator.py\nindex ab98987f8e..0a0d0f7d0d 100644\n--- a/dts/framework/testbed_model/capturing_traffic_generator.py\n+++ b/dts/framework/testbed_model/capturing_traffic_generator.py\n@@ -52,6 +52,8 @@ def send_packet_and_capture(\n         send_port: Port,\n         receive_port: Port,\n         duration: float,\n+        no_lldp: bool,\n+        no_arp: bool,\n         capture_name: str = _get_default_capture_name(),\n     ) -> list[Packet]:\n         \"\"\"Send a packet, return received traffic.\n@@ -71,7 +73,7 @@ def send_packet_and_capture(\n              A list of received packets. May be empty if no packets are captured.\n         \"\"\"\n         return self.send_packets_and_capture(\n-            [packet], send_port, receive_port, duration, capture_name\n+            [packet], send_port, receive_port, duration, no_lldp, no_arp, capture_name\n         )\n \n     def send_packets_and_capture(\n@@ -80,6 +82,8 @@ def send_packets_and_capture(\n         send_port: Port,\n         receive_port: Port,\n         duration: float,\n+        no_lldp: bool,\n+        no_arp: bool,\n         capture_name: str = _get_default_capture_name(),\n     ) -> list[Packet]:\n         \"\"\"Send packets, return received traffic.\n@@ -93,6 +97,8 @@ def send_packets_and_capture(\n             send_port: The egress port on the TG node.\n             receive_port: The ingress port in the TG node.\n             duration: Capture traffic for this amount of time after sending the packets.\n+            no_lldp: Option to disable capturing LLDP packets\n+            no_arp: Option to disable capturing ARP packets\n             capture_name: The name of the .pcap file where to store the capture.\n \n         Returns:\n@@ -108,6 +114,8 @@ def send_packets_and_capture(\n             send_port,\n             receive_port,\n             duration,\n+            no_lldp,\n+            no_arp,\n         )\n \n         self._logger.debug(\n@@ -123,6 +131,8 @@ def _send_packets_and_capture(\n         send_port: Port,\n         receive_port: Port,\n         duration: float,\n+        no_lldp: bool,\n+        no_arp: bool,\n     ) -> list[Packet]:\n         \"\"\"\n         The extended classes must implement this method which\ndiff --git a/dts/framework/testbed_model/scapy.py b/dts/framework/testbed_model/scapy.py\nindex af0d4dbb25..58f01af21a 100644\n--- a/dts/framework/testbed_model/scapy.py\n+++ b/dts/framework/testbed_model/scapy.py\n@@ -69,6 +69,7 @@ def scapy_send_packets_and_capture(\n     send_iface: str,\n     recv_iface: str,\n     duration: float,\n+    sniff_filter: str,\n ) -> list[bytes]:\n     \"\"\"RPC function to send and capture packets.\n \n@@ -90,6 +91,7 @@ def scapy_send_packets_and_capture(\n         iface=recv_iface,\n         store=True,\n         started_callback=lambda *args: scapy.all.sendp(scapy_packets, iface=send_iface),\n+        filter=sniff_filter,\n     )\n     sniffer.start()\n     time.sleep(duration)\n@@ -264,10 +266,16 @@ def _send_packets_and_capture(\n         send_port: Port,\n         receive_port: Port,\n         duration: float,\n+        no_lldp: bool,\n+        no_arp: bool,\n         capture_name: str = _get_default_capture_name(),\n     ) -> list[Packet]:\n         binary_packets = [packet.build() for packet in packets]\n-\n+        sniff_filter = []\n+        if no_lldp:\n+            sniff_filter.append(\"ether[12:2] != 0x88cc\")\n+        if no_arp:\n+            sniff_filter.append(\"ether[12:2] != 0x0806\")\n         xmlrpc_packets: list[\n             xmlrpc.client.Binary\n         ] = self.rpc_server_proxy.scapy_send_packets_and_capture(\n@@ -275,6 +283,7 @@ def _send_packets_and_capture(\n             send_port.logical_name,\n             receive_port.logical_name,\n             duration,\n+            \" && \".join(sniff_filter),\n         )  # type: ignore[assignment]\n \n         scapy_packets = [Ether(packet.data) for packet in xmlrpc_packets]\ndiff --git a/dts/framework/testbed_model/tg_node.py b/dts/framework/testbed_model/tg_node.py\nindex 27025cfa31..98e55b7831 100644\n--- a/dts/framework/testbed_model/tg_node.py\n+++ b/dts/framework/testbed_model/tg_node.py\n@@ -56,6 +56,8 @@ def send_packet_and_capture(\n         send_port: Port,\n         receive_port: Port,\n         duration: float = 1,\n+        no_lldp: bool = True,\n+        no_arp: bool = True,\n     ) -> list[Packet]:\n         \"\"\"Send a packet, return received traffic.\n \n@@ -73,7 +75,7 @@ def send_packet_and_capture(\n              A list of received packets. May be empty if no packets are captured.\n         \"\"\"\n         return self.traffic_generator.send_packet_and_capture(\n-            packet, send_port, receive_port, duration\n+            packet, send_port, receive_port, duration, no_lldp, no_arp\n         )\n \n     def close(self) -> None:\n",
    "prefixes": [
        "v2",
        "5/7"
    ]
}