From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3CF2745A2C; Wed, 25 Sep 2024 20:22:16 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 28A81402EF; Wed, 25 Sep 2024 20:22:16 +0200 (CEST) Received: from mail-oo1-f103.google.com (mail-oo1-f103.google.com [209.85.161.103]) by mails.dpdk.org (Postfix) with ESMTP id 4DF6D402D8 for ; Wed, 25 Sep 2024 20:22:15 +0200 (CEST) Received: by mail-oo1-f103.google.com with SMTP id 006d021491bc7-5d5f24d9df8so103956eaf.2 for ; Wed, 25 Sep 2024 11:22:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iol.unh.edu; s=unh-iol; t=1727288534; x=1727893334; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yaIeRByT0nezzMad3jwj94hjRrU9mlCSXeNCcQqCAOE=; b=GmlGCAlOp9xq2K5P7XOr+71CRcp6QiNwqZNhkx1oh9cYEgypPE7n/o06nefdWwslnH r9bo5xudsItWj0HN2yI2MAKuwxZ9LktBRpSb6MqEtHHY5Wk+7G3ox55ZwIeyktVSFkik 8iWQMgJKn96rS4qRqeMl/81su1KpoB2M4xSgA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727288534; x=1727893334; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yaIeRByT0nezzMad3jwj94hjRrU9mlCSXeNCcQqCAOE=; b=mDYqGJVfXH9Upq1CVQx8pmz+2g3iWd61HMkkYOVgobMmD599SJ/WBNyXvnmIlqrsNS ZHo0d9YDgzLV6m1uaWlbk/vxQfHLao49dofVAcd2cXSbTuTes4PRCui2UqJYokvOWq5s 6fZcbhLKSndTIT440qvAMxZ1JcGzrjvXYIHDqiTfCjD9cyrnHSLixbhSu+AoHA/3amig vWPHSHOhmgW//CJAuRcdG6w4s7AyS7xLiqLDwEtRRLmjLRW+uEKiq99VG3dkfbGvXcbA aBXQDLNXov1kvSPX/x4oUHPp3htcqHeGKQQGSDuY1dBFfr0xJqe/58sIKz8LfAH2/rXh 9RBw== X-Gm-Message-State: AOJu0YwvgaGdVwHy/73oANauGyRsJtMpPG8L2Vhcgtpl/EASQpk5gXOl 2zlmFb5c4prnP3lvYN3KUjBSOomEhQyzWRQyMTGYLfq0fn+skXt2uVMoWiqeuYZ8MG438Y7BYh1 mO9c4SLlC+FB8XGSEH0yvxTMUAlUb8GIC X-Google-Smtp-Source: AGHT+IG/wKDU+GH2rB7vk3CdHpTcUXIb+Nm75RFppaCAGG9KKZhF4lCXCWateinA7GenkrcJI0ys978g/WCs X-Received: by 2002:a05:6358:914b:b0:1b5:ffce:b2a1 with SMTP id e5c5f4694b2df-1bea85a19c4mr186618955d.16.1727288534319; Wed, 25 Sep 2024 11:22:14 -0700 (PDT) Received: from postal.iol.unh.edu (postal.iol.unh.edu. [132.177.123.84]) by smtp-relay.gmail.com with ESMTPS id 6a1803df08f44-6cb2d0f2b37sm321726d6.6.2024.09.25.11.22.14 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 25 Sep 2024 11:22:14 -0700 (PDT) X-Relaying-Domain: iol.unh.edu Received: from iol.unh.edu (unknown [IPv6:2606:4100:3880:1257::1083]) by postal.iol.unh.edu (Postfix) with ESMTP id 79443605C352; Wed, 25 Sep 2024 14:22:13 -0400 (EDT) From: jspewock@iol.unh.edu To: wathsala.vithanage@arm.com, alex.chapman@arm.com, Luca.Vizzarro@arm.com, probb@iol.unh.edu, juraj.linkes@pantheon.tech, Honnappa.Nagarahalli@arm.com, paul.szczepanek@arm.com, npratte@iol.unh.edu, yoan.picchi@foss.arm.com, thomas@monjalon.net Cc: dev@dpdk.org, Jeremy Spewock Subject: [PATCH v3 1/1] dts: rework packet addressing Date: Wed, 25 Sep 2024 14:21:41 -0400 Message-ID: <20240925182141.15404-2-jspewock@iol.unh.edu> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240925182141.15404-1-jspewock@iol.unh.edu> References: <20240904152827.11914-1-jspewock@iol.unh.edu> <20240925182141.15404-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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Jeremy Spewock This patch updates the _adjust_addresses method of test suites so that addresses of packets are only modified if the developer did not configure them beforehand. This allows for developers to have more control over the content of their packets when sending them through the framework. Signed-off-by: Jeremy Spewock --- dts/framework/test_suite.py | 75 ++++++++++++++++++++++++++----------- 1 file changed, 54 insertions(+), 21 deletions(-) diff --git a/dts/framework/test_suite.py b/dts/framework/test_suite.py index 051509fb86..69388ff5ab 100644 --- a/dts/framework/test_suite.py +++ b/dts/framework/test_suite.py @@ -225,7 +225,7 @@ def send_packets_and_capture( Returns: A list of received packets. """ - packets = [self._adjust_addresses(packet) for packet in packets] + packets = self._adjust_addresses(packets) return self.tg_node.send_packets_and_capture( packets, self._tg_port_egress, @@ -243,41 +243,74 @@ def get_expected_packet(self, packet: Packet) -> Packet: Returns: `packet` with injected L2/L3 addresses. """ - return self._adjust_addresses(packet, expected=True) + return self._adjust_addresses([packet], expected=True)[0] - def _adjust_addresses(self, packet: Packet, expected: bool = False) -> Packet: + def _adjust_addresses(self, packets: list[Packet], expected: bool = False) -> list[Packet]: """L2 and L3 address additions in both directions. + Packets in `packets` will be directly modified in this method. The returned list of packets + however will be copies of the modified packets in order to keep the two lists distinct. + + Only missing addresses are added to packets, existing addresses will not be overridden. If + any packet in `packets` has multiple IP layers (using GRE, for example) only the inner-most + IP layer will have its addresses adjusted. + Assumptions: Two links between SUT and TG, one link is TG -> SUT, the other SUT -> TG. Args: - packet: The packet to modify. + packets: The packets to modify. expected: If :data:`True`, the direction is SUT -> TG, otherwise the direction is TG -> SUT. + + Returns: + A list containing copies of all packets in `packets` after modification. """ - if expected: - # The packet enters the TG from SUT - # update l2 addresses - packet.src = self._sut_port_egress.mac_address - packet.dst = self._tg_port_ingress.mac_address + ret_packets = [] + for packet in packets: + # The fields parameter of a packet does not include fields of the payload, so this can + # only be the Ether src/dst. + pkt_src_is_unset = "src" not in packet.fields + pkt_dst_is_unset = "dst" not in packet.fields + num_ip_layers = packet.layers().count(IP) + + if num_ip_layers > 0: + # Update the last IP layer if there are multiple (the framework should be modifying + # the packet address instead of the tunnel address if there is one). + l3_to_use = packet.getlayer(IP, num_ip_layers) + ip_src_is_unset = "src" not in l3_to_use.fields + ip_dst_is_unset = "dst" not in l3_to_use.fields + else: + ip_src_is_unset = None + ip_dst_is_unset = None - # The packet is routed from TG egress to TG ingress - # update l3 addresses - packet.payload.src = self._tg_ip_address_egress.ip.exploded - packet.payload.dst = self._tg_ip_address_ingress.ip.exploded - else: - # The packet leaves TG towards SUT # update l2 addresses - packet.src = self._tg_port_egress.mac_address - packet.dst = self._sut_port_ingress.mac_address + # If `expected` is :data:`True`, the packet enters the TG from SUT, otherwise the + # packet leaves the TG towards the SUT + if pkt_src_is_unset: + packet.src = ( + self._sut_port_egress.mac_address + if expected + else self._tg_port_egress.mac_address + ) + if pkt_dst_is_unset: + packet.dst = ( + self._tg_port_ingress.mac_address + if expected + else self._sut_port_ingress.mac_address + ) - # The packet is routed from TG egress to TG ingress # update l3 addresses - packet.payload.src = self._tg_ip_address_egress.ip.exploded - packet.payload.dst = self._tg_ip_address_ingress.ip.exploded + # The packet is routed from TG egress to TG ingress regardless of whether it is + # expected or not. + if ip_src_is_unset: + l3_to_use.src = self._tg_ip_address_egress.ip.exploded + + if ip_dst_is_unset: + l3_to_use.dst = self._tg_ip_address_ingress.ip.exploded + ret_packets.append(Ether(packet.build())) - return Ether(packet.build()) + return ret_packets def verify(self, condition: bool, failure_description: str) -> None: """Verify `condition` and handle failures. -- 2.46.0