From patchwork Tue Sep 3 08:54:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ales Musil X-Patchwork-Id: 1979936 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=E3g3IfkX; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.137; helo=smtp4.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4WyfZq1D0Pz1yg9 for ; Tue, 3 Sep 2024 18:54:58 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 3AA45402CA; Tue, 3 Sep 2024 08:54:57 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id pPIyGtuujJgn; Tue, 3 Sep 2024 08:54:55 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 3ECBB40240 Authentication-Results: smtp4.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=E3g3IfkX Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp4.osuosl.org (Postfix) with ESMTPS id 3ECBB40240; Tue, 3 Sep 2024 08:54:55 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 09E20C0012; Tue, 3 Sep 2024 08:54:55 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 24F7AC0011 for ; Tue, 3 Sep 2024 08:54:54 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 0313B40968 for ; Tue, 3 Sep 2024 08:54:54 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id DFxIBDnkIAGT for ; Tue, 3 Sep 2024 08:54:52 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=170.10.129.124; helo=us-smtp-delivery-124.mimecast.com; envelope-from=amusil@redhat.com; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp2.osuosl.org 885A640949 Authentication-Results: smtp2.osuosl.org; dmarc=pass (p=none dis=none) header.from=redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 885A640949 Authentication-Results: smtp2.osuosl.org; dkim=pass (1024-bit key, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=E3g3IfkX Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by smtp2.osuosl.org (Postfix) with ESMTPS id 885A640949 for ; Tue, 3 Sep 2024 08:54:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1725353691; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=+13hOTCDnX470kf3eJ8XnhrcE+w+Ph5yEsj6lDPP1aU=; b=E3g3IfkXKzXezbkFEnYNt+QmNb6iRr4czpsCN2bmw6HNMARbr6la9UrdIxMrqA8LL8wSqc i+MoG/gV99IQ/wrzaLiIGRgrhiCA1bswEp381cbs+3WovTkeoBKiHzXlhD6unydELQzTF8 wxIWj7bBppXmwBOx7i4U8N2nKVXHn0U= Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-503-HMY-uZG2OuWdKxa4vf1j0w-1; Tue, 03 Sep 2024 04:54:49 -0400 X-MC-Unique: HMY-uZG2OuWdKxa4vf1j0w-1 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 1066F1979048 for ; Tue, 3 Sep 2024 08:54:49 +0000 (UTC) Received: from amusil.brq.redhat.com (unknown [10.43.17.32]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id B070819560AE; Tue, 3 Sep 2024 08:54:47 +0000 (UTC) From: Ales Musil To: dev@openvswitch.org Date: Tue, 3 Sep 2024 10:54:46 +0200 Message-ID: <20240903085446.228817-1-amusil@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: [ovs-dev] [PATCH ovn] system-test: Simplify the MTU + SNAT test and add IPv6. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: dceara@redhat.com Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" The MTU with SNAT test was overly complicated, simplify it using ping to achieve the same result with more robust checks. Also add IPv6 to make sure both protocols are covered. Signed-off-by: Ales Musil --- tests/system-ovn-kmod.at | 98 ++++++++++++++-------------------------- 1 file changed, 35 insertions(+), 63 deletions(-) diff --git a/tests/system-ovn-kmod.at b/tests/system-ovn-kmod.at index 63ecc7ff4..75ecdadeb 100644 --- a/tests/system-ovn-kmod.at +++ b/tests/system-ovn-kmod.at @@ -909,7 +909,6 @@ AT_CLEANUP OVN_FOR_EACH_NORTHD([ AT_SETUP([LR with SNAT fragmentation needed for external server]) -AT_KEYWORDS([ovnlb]) CHECK_CONNTRACK() CHECK_CONNTRACK_NAT() @@ -920,15 +919,16 @@ ADD_BR([br-int]) ADD_BR([br-ext]) dnl Logical network: -dnl 2 logical switches "public" (192.168.1.0/24) and "internal" (172.16.1.0/24) -dnl connected to a router lr. +dnl 2 logical switches "public" (192.168.10.0/24 and fd10::/64) +dnl and "internal" (192.168.20.0/24 and fd20::/64) connected to a router lr. dnl internal has a client. dnl server is connected through localnet. dnl -dnl Server IP 192.168.1.2 MTU 900 -dnl Client IP 172.16.1.2 MTU 800 +dnl Server IP 192.168.10.2 fd10:2 +dnl Client IP 192.168.20.2 fd20:2 dnl -dnl SNAT for internal 172.16.1.2/24 with router ip 192.168.1.1. +dnl SNAT for internal 192.168.20.0/24 with router ip 192.168.10.1. +dnl SNAT for internal fd20::/64 with router ip fd10::1. check ovs-ofctl add-flow br-ext action=normal # Set external-ids in br-int needed for ovn-controller @@ -947,11 +947,11 @@ check ovn-nbctl lr-add lr check ovn-nbctl ls-add internal check ovn-nbctl ls-add public -check ovn-nbctl lrp-add lr lr-pub 00:00:01:01:02:03 192.168.1.1/24 +check ovn-nbctl lrp-add lr lr-pub 00:00:01:01:02:03 192.168.10.1/24 fd10::1/64 check ovn-nbctl lsp-add public pub-lr -- set Logical_Switch_Port pub-lr \ type=router options:router-port=lr-pub addresses=\"00:00:01:01:02:03\" -check ovn-nbctl lrp-add lr lr-internal 00:00:01:01:02:04 172.16.1.1/24 +check ovn-nbctl lrp-add lr lr-internal 00:00:01:01:02:04 192.168.20.1/24 fd20::1/64 check ovn-nbctl lsp-add internal internal-lr -- set Logical_Switch_Port internal-lr \ type=router options:router-port=lr-internal addresses=\"00:00:01:01:02:04\" @@ -961,79 +961,51 @@ ovn-nbctl lsp-add public ln_port \ -- lsp-set-options ln_port network_name=phynet ADD_NAMESPACES(server) -ADD_VETH([server], [server], [br-ext], ["192.168.1.2/24"], - ["f0:00:00:01:02:03"], ["192.168.1.1"]) -NS_EXEC([server], [ip l set dev server mtu 900]) -NS_EXEC([server], [ip l show dev server]) +ADD_VETH(server, server, br-ext, "fd10::2/64", "f0:00:00:01:02:03", "fd10::1", + "nodad", "192.168.10.2/24", "192.168.10.1") +NS_EXEC([server], [ip a show dev server]) ADD_NAMESPACES(client) -ADD_VETH([client], [client], [br-int], ["172.16.1.2/24"], - ["f0:00:0f:01:02:03"], ["172.16.1.1"]) -NS_EXEC([client], [ip l set dev client mtu 800]) -NS_EXEC([client], [ip l show dev client]) +ADD_VETH(client, client, br-int, "fd20::2/64", "f0:00:0f:01:02:03", "fd20::1", + "nodad", "192.168.20.2/24", "192.168.20.1") +NS_EXEC([client], [ip a show dev client]) check ovn-nbctl lsp-add internal client \ - -- lsp-set-addresses client "f0:00:0f:01:02:03 172.16.1.2" + -- lsp-set-addresses client "f0:00:0f:01:02:03 192.168.20.2 fd20::2" -dnl Config OVN load-balancer with a VIP. (not necessary, but if we do not -dnl have a load balancer and comment out snat, we will receive a stray fragment -dnl on the client side.) -dnl check ovn-nbctl lb-add lb1 192.168.1.20:4242 172.16.1.2:4242 udp -dnl check ovn-nbctl lr-lb-add lr lb1 check ovn-nbctl set logical_router lr options:chassis=hv1 -check ovn-nbctl set logical_router_port lr-internal options:gateway_mtu=800 +check ovn-nbctl set logical_router_port lr-internal options:gateway_mtu=1300 -check ovn-nbctl lr-nat-add lr snat 192.168.1.1 172.16.1.2 +check ovn-nbctl lr-nat-add lr snat 192.168.10.1 192.168.20.0/24 +check ovn-nbctl lr-nat-add lr snat fd10::1 fd20::/64 +OVN_POPULATE_ARP check ovn-nbctl --wait=hv sync ovn-nbctl show ovs-vsctl show ovn-appctl -t ovn-controller vlog/set vconn:file:dbg pinctrl:file:dbg -AT_DATA([server.py], [dnl -import socket - -sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - -server_address = '192.168.1.2' -server_port = 4242 - -server = (server_address, server_port) -sock.bind(server) -print("Listening on ", server_address, ":", str(server_port), flush=True) - -while True: - payload, client_address = sock.recvfrom(1000) - print("Received data from ", str(client_address), ": ", payload) - sent = sock.sendto(b"x" * 1017, client_address) - print("Sent back: ", str(sent), "bytes", flush=True) +AS_BOX([IPv4]) +NS_CHECK_EXEC([client], [ping -c 1 -W 2 -s 1400 192.168.10.2 | grep -q "Frag needed and DF set (mtu = 1300)"]) +NS_CHECK_EXEC([client], [ping -c 1 -W 2 -s 1400 192.168.10.2], [1], [ignore]) +NS_CHECK_EXEC([client], [ping -c 1 -W 2 -s 1400 192.168.10.2 | FORMAT_PING], +[0], [dnl +1 packets transmitted, 1 received, 0% packet loss, time 0ms ]) -NETNS_DAEMONIZE([server], [$PYTHON3 ./server.py > server.log], [server.pid]) -dnl Collect packets on server side. -NETNS_START_TCPDUMP([server], [-U -i server -vnne 'ip and (icmp or udp)'], [tcpdump-server]) +NS_CHECK_EXEC([client], [ip r get 192.168.10.2 | grep -q "mtu 1300"]) +NS_CHECK_EXEC([server], [ip r get 192.168.10.1 | grep -q "mtu 1300"]) -dnl Collect packets on client side. -NETNS_START_TCPDUMP([client], [-U -i client -vnne 'ip and (icmp or udp)'], [tcpdump-client]) - -dnl Send two packets to the server with a short interval. -dnl First packet should generate 'needs frag', the second should result in -dnl corectly fragmented reply. -AT_DATA([client.py], [dnl -import socket -import time - -sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) -sock.sendto(b"x" * 7, ("192.168.1.2", 4242)) -time.sleep(1) -sock.sendto(b"x" * 7, ("192.168.1.2", 4242)) -time.sleep(5) +AS_BOX([IPv6]) +NS_CHECK_EXEC([client], [ping -c 1 -W 2 -s 1400 fd10::2 | grep -q "Packet too big: mtu=1300"]) +NS_CHECK_EXEC([client], [ping -c 1 -W 2 -s 1400 fd10::2], [1], [ignore]) +NS_CHECK_EXEC([client], [ping -c 1 -W 2 -s 1400 fd10::2 | FORMAT_PING], +[0], [dnl +1 packets transmitted, 1 received, 0% packet loss, time 0ms ]) -NS_CHECK_EXEC([client], [$PYTHON3 ./client.py]) -dnl Expecting 2 outgoing packets and 2 fragments back - 8 lines total. -OVS_WAIT_UNTIL([test "$(cat tcpdump-client.tcpdump | wc -l)" = "8"]) -AT_CHECK([test $(grep -c "need to frag (mtu 800)" tcpdump-server.tcpdump) -eq 1]) +NS_CHECK_EXEC([client], [ip r get fd10::2 | grep -q "mtu 1300"]) +NS_CHECK_EXEC([server], [ip r get fd10::1 | grep -q "mtu 1300"]) ovn-appctl -t ovn-controller vlog/set info