From patchwork Tue Sep 26 09:58:59 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gao Zhenyu X-Patchwork-Id: 818509 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="RXdICnR1"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3y1bzM6gzGz9tXb for ; Tue, 26 Sep 2017 19:59:59 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id C7405BE4; Tue, 26 Sep 2017 09:59:57 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 0CF8EBC9 for ; Tue, 26 Sep 2017 09:59:56 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-pf0-f195.google.com (mail-pf0-f195.google.com [209.85.192.195]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 4070520C for ; Tue, 26 Sep 2017 09:59:55 +0000 (UTC) Received: by mail-pf0-f195.google.com with SMTP id i23so4812371pfi.2 for ; Tue, 26 Sep 2017 02:59:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=7nAz+AgoM+dny7xqrKp16e0BxPaGIaQ3ngND2PQmVYE=; b=RXdICnR1U7A5tkbpf/IuMIXvQ//KsRNX1U5CdZNNB6CWyTkQnMg66E8K+eY60jRMRb 5jgohRNnQbup/OQhMnd3kMIqcbTi1aJxrC8VfgBTYJrE6LNA1Br/3lVWf2eByAPwq+To 9WtLcUQlSjgJkdCUDq9ScsVFYQfjn1JizCtICJindedXnZRcooQqgNExRk9gITKQeApn ZMt3JwMsMVdpCyzJpfPHfdNmb/z+eLvBalE7SEBnjpp50Lkq0QDFhYSWvKNw1Zknuoit vCVnXu8WCz51wRVHFRkSun2fkznHdJ5z/X/m4fXFhPU7KQkBrExTuDfiadMVzTT2xMJB 8Czg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=7nAz+AgoM+dny7xqrKp16e0BxPaGIaQ3ngND2PQmVYE=; b=ipLVgpl3/d2v3Lxr5bNX4uvdWu08ejVjQ6IoqaUR9q+BqcwmKvkRK2kOsAT+/SbWXr OawmkCXK+YJ03zKNadZRAeiSqyM11m/+opqQvG6GyZmxHCAyCJamVr19soEWhhJi3ncF NVxxma1o25ZFQkIg8hE4kbFFv3UIOJ1OpuzvnhlSo2RAMFKjegZz+4FIoH4kPdAA7QTQ SsE/+JWxzzWZElQ8eWvM/nWkKV/DKOQbSmNU4XRcI1U2IrRDsi8QhXbOxG48gnx4+cAs /X1DBuDe5/rXFhP0hHNfy98tJ7myU0YQ3OIeF8zpBMClXV2cakl/pdPWiHu1DEYxTNl8 yDeQ== X-Gm-Message-State: AHPjjUj4q/4U0F3QR4nFVAJCTLSxIfE98Z7JtvBjDB7hyL4OZqjiED81 WpE3cR+7IK31VNPmW9gboWw= X-Google-Smtp-Source: AOwi7QBxI2Mwstm/3tf8wo5iWjTrjDV1XYPO3AtA9aNObBK9orxVMQqiKC/y/E0NFy9YoQEwyxm/bg== X-Received: by 10.99.153.1 with SMTP id d1mr10713170pge.208.1506419994789; Tue, 26 Sep 2017 02:59:54 -0700 (PDT) Received: from vultr.guest ([45.77.33.88]) by smtp.gmail.com with ESMTPSA id d5sm17380738pfg.26.2017.09.26.02.59.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Sep 2017 02:59:54 -0700 (PDT) From: Zhenyu Gao To: majopela@redhat.com, anilvenkata@redhat.com, russell@ovn.org, dev@openvswitch.org Date: Tue, 26 Sep 2017 09:58:59 +0000 Message-Id: <20170926095859.29012-1-sysugaozhenyu@gmail.com> X-Mailer: git-send-email 2.11.0 X-Spam-Status: No, score=-0.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE autolearn=disabled version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: [ovs-dev] [PATCH v2 3/3] Update ovn.at to add multipath testcase X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org 1. Add multipath testcase in ovn testsuites. It simulates dispatching packets in router by consuming multipath feature in Logical_Router_Static_Route. Signed-off-by: Zhenyu Gao --- tests/ovn.at | 229 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) diff --git a/tests/ovn.at b/tests/ovn.at index 6c38b97..6d59e64 100644 --- a/tests/ovn.at +++ b/tests/ovn.at @@ -4448,6 +4448,235 @@ OVN_CLEANUP([hv1],[hv2]) AT_CLEANUP +AT_SETUP([ovn -- 3 HVs, 4LSs, 3LR, packet test with multipath]) +AT_SKIP_IF([test $HAVE_PYTHON = no]) +ovn_start + +# Logical network: +# Three LRs - R1 and R2 that are connected to each other via LS "join" +# in 20.0.0.0/24 network. R1 and R3 that are connected to each other +# via LS "join2" in 20.0.0.0/24 network. +# R1 has switchess foo (192.168.1.0/24) +# connected to it. R2 and R3 has alice (172.16.1.0/24) connected to it. +# R2 and R3 are gateway routers. + + +# Create three hypervisor and create OVS ports corresponding to logical ports. +net_add n1 + +sim_add hv1 +as hv1 +ovs-vsctl add-br br-phys +ovn_attach n1 br-phys 192.168.0.1 +ovs-vsctl -- add-port br-int hv1-vif1 -- \ + set interface hv1-vif1 external-ids:iface-id=foo1 \ + options:tx_pcap=hv1/vif1-tx.pcap \ + options:rxq_pcap=hv1/vif1-rx.pcap \ + ofport-request=1 + + +sim_add hv2 +as hv2 +ovs-vsctl add-br br-phys +ovn_attach n1 br-phys 192.168.0.2 +ovs-vsctl -- add-port br-int hv2-vif1 -- \ + set interface hv2-vif1 external-ids:iface-id=alice1 \ + options:tx_pcap=hv2/vif1-tx.pcap \ + options:rxq_pcap=hv2/vif1-rx.pcap \ + ofport-request=1 + +sim_add hv3 +as hv3 +ovs-vsctl add-br br-phys +ovn_attach n1 br-phys 192.168.0.3 +ovs-vsctl -- add-port br-int hv3-vif1 -- \ + set interface hv3-vif1 external-ids:iface-id=alice2 \ + options:tx_pcap=hv3/vif1-tx.pcap \ + options:rxq_pcap=hv3/vif1-rx.pcap \ + ofport-request=1 + +# Pre-populate the hypervisors' ARP tables so that we don't lose any +# packets for ARP resolution (native tunneling doesn't queue packets +# for ARP resolution). +ovn_populate_arp + +ovn-nbctl create Logical_Router name=R1 +ovn-nbctl create Logical_Router name=R2 options:chassis="hv2" +ovn-nbctl create Logical_Router name=R3 options:chassis="hv3" + +ovn-nbctl ls-add foo +ovn-nbctl ls-add alice +ovn-nbctl ls-add join +ovn-nbctl ls-add join2 + +# Connect foo to R1 +ovn-nbctl lrp-add R1 foo 00:00:01:01:02:03 192.168.1.1/24 +ovn-nbctl lsp-add foo rp-foo -- set Logical_Switch_Port rp-foo \ + type=router options:router-port=foo addresses=\"00:00:01:01:02:03\" + +# Connect alice to R2 +ovn-nbctl lrp-add R2 alice 00:00:02:01:02:03 172.16.1.1/24 +ovn-nbctl lsp-add alice rp-alice -- set Logical_Switch_Port rp-alice \ + type=router options:router-port=alice addresses=\"00:00:02:01:02:03\" + +# Connect R1 to join +ovn-nbctl lrp-add R1 R1_join 00:00:04:01:02:03 20.0.0.1/24 +ovn-nbctl lsp-add join r1-join -- set Logical_Switch_Port r1-join \ + type=router options:router-port=R1_join addresses='"00:00:04:01:02:03"' + +# Connect R2 to join +ovn-nbctl lrp-add R2 R2_join 00:00:04:01:02:04 20.0.0.2/24 +ovn-nbctl lsp-add join r2-join -- set Logical_Switch_Port r2-join \ + type=router options:router-port=R2_join addresses='"00:00:04:01:02:04"' + +# Connnect R1 to join2 +ovn-nbctl lrp-add R1 R1_join2 00:00:05:01:02:03 20.0.0.3/24 +ovn-nbctl lsp-add join2 r1-join2 -- set Logical_Switch_Port r1-join2 \ + type=router options:router-port=R1_join2 addresses='"00:00:05:01:02:03"' + +# Connect R3 to join2 Set same IP for multipath routing +ovn-nbctl lrp-add R3 R3_join2 00:00:06:01:02:04 20.0.0.2/24 +ovn-nbctl lsp-add join2 r3-join2 -- set Logical_Switch_Port r3-join2 \ + type=router options:router-port=R3_join2 addresses='"00:00:06:01:02:04"' + +#Connect alice to R3 +ovn-nbctl lrp-add R3 R3_alice 00:00:07:01:02:03 172.16.1.10/24 +ovn-nbctl lsp-add alice r3-alice -- set Logical_Switch_Port r3-alice \ + type=router options:router-port=R3_alice addresses=\"00:00:07:01:02:03\" + + +#install multipath routes +ovn-nbctl lr-route-add R1 "172.16.1.0/24" 20.0.0.2 R1_join R1_join2 fake_port + +#install static routes +ovn-nbctl -- --id=@lrt create Logical_Router_Static_Route \ +ip_prefix=192.168.1.0/24 nexthop=20.0.0.1 -- add Logical_Router \ +R2 static_routes @lrt + +ovn-nbctl -- --id=@lrt create Logical_Router_Static_Route \ +ip_prefix=192.168.1.0/24 nexthop=20.0.0.3 -- add Logical_Router \ +R3 static_routes @lrt + +# Create logical port foo1 in foo +ovn-nbctl lsp-add foo foo1 \ +-- lsp-set-addresses foo1 "f0:00:00:01:02:03 192.168.1.2" + +# Create logical port alice1 in alice +ovn-nbctl lsp-add alice alice1 \ +-- lsp-set-addresses alice1 "f0:00:00:01:02:04 172.16.1.2" + +# Create logical port alice2 in alice +ovn-nbctl lsp-add alice alice2 \ +-- lsp-set-addresses alice2 "f0:00:00:01:02:06 172.16.1.4" + +# Allow some time for ovn-northd and ovn-controller to catch up. +# XXX This should be more systematic. +sleep 2 + +ip_to_hex() { + printf "%02x%02x%02x%02x" "$@" +} + +# Send ip packets between foo1 and alice1 +src_mac="f00000010203" +dst_mac="000001010203" +src_ip=`ip_to_hex 192 168 1 2` +dst_ip=`ip_to_hex 172 16 1 2` +packet=${dst_mac}${src_mac}08004500001c0000000040110000${src_ip}${dst_ip}0035111100080000 + +echo "---------NB dump-----" +ovn-nbctl show +echo "---------------------" +ovn-nbctl list logical_router +echo "---------------------" +ovn-nbctl list logical_router_port +echo "---------------------" + +echo "---------SB dump-----" +ovn-sbctl list datapath_binding +echo "---------------------" +ovn-sbctl list port_binding +echo "---------------------" +ovn-sbctl dump-flows +echo "---------------------" +ovn-sbctl list chassis +ovn-sbctl list encap +echo "---------------------" + +# Packet to Expect at alice1 +src_mac="000007010203" +dst_mac="f00000010204" +src_ip=`ip_to_hex 192 168 1 2` +dst_ip=`ip_to_hex 172 16 1 2` +expected=${dst_mac}${src_mac}08004500001c000000003e110200${src_ip}${dst_ip}0035111100080000 + + +as hv1 ovs-appctl netdev-dummy/receive hv1-vif1 $packet +as hv1 ovs-appctl ofproto/trace br-int in_port=1 $packet + +echo "------ hv1 dump after packet 1 ----------" +as hv1 ovs-ofctl show br-int +as hv1 ovs-ofctl dump-flows br-int +echo "------ hv2 dump after packet 1 ----------" +as hv2 ovs-ofctl show br-int +as hv2 ovs-ofctl dump-flows br-int +echo "----------------------------" + +echo $expected > expected +OVN_CHECK_PACKETS([hv2/vif1-tx.pcap], [expected]) + +# Send ip packets between foo1 and alice2 +src_mac="f00000010203" +dst_mac="000001010203" +src_ip=`ip_to_hex 192 168 1 2` +dst_ip=`ip_to_hex 172 16 1 4` +packet=${dst_mac}${src_mac}08004500001c0000000040110000${src_ip}${dst_ip}0035111100080000 + +echo "---------NB dump-----" +ovn-nbctl show +echo "---------------------" +ovn-nbctl list logical_router +echo "---------------------" +ovn-nbctl list logical_router_port +echo "---------------------" + +echo "---------SB dump-----" +ovn-sbctl list datapath_binding +echo "---------------------" +ovn-sbctl list port_binding +echo "---------------------" +ovn-sbctl dump-flows +echo "---------------------" +ovn-sbctl list chassis +ovn-sbctl list encap +echo "---------------------" + +# Packet to Expect at alice2 +src_mac="000002010203" +dst_mac="f00000010206" +src_ip=`ip_to_hex 192 168 1 2` +dst_ip=`ip_to_hex 172 16 1 4` +expected=${dst_mac}${src_mac}08004500001c000000003e110200${src_ip}${dst_ip}0035111100080000 + + +# Send the packet again. +as hv1 ovs-appctl netdev-dummy/receive hv1-vif1 $packet + +echo "------ hv1 dump after packet 2 ----------" +as hv1 ovs-ofctl show br-int +as hv1 ovs-ofctl dump-flows br-int +echo "------ hv3 dump after packet 2 ----------" +as hv3 ovs-ofctl show br-int +as hv3 ovs-ofctl dump-flows br-int +echo "----------------------------" + +echo $expected > expected +OVN_CHECK_PACKETS([hv3/vif1-tx.pcap], [expected]) + +OVN_CLEANUP([hv1],[hv2],[hv3]) + +AT_CLEANUP + AT_SETUP([ovn -- icmp_reply: 1 HVs, 2 LSs, 1 lport/LS, 1 LR]) AT_KEYWORDS([router-icmp-reply]) AT_SKIP_IF([test $HAVE_PYTHON = no])