From patchwork Wed Apr 4 21:57:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Scheurich X-Patchwork-Id: 895364 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; dmarc=fail (p=none dis=none) header.from=ericsson.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ericsson.com header.i=@ericsson.com header.b="FBXrcVNk"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ericsson.com header.i=@ericsson.com header.b="fcc45fBu"; 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 40H1pD38VNz9s0n for ; Thu, 5 Apr 2018 22:09:08 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 71FCFC41; Thu, 5 Apr 2018 12:08:38 +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 4897DC14 for ; Thu, 5 Apr 2018 12:08:36 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from sessmg22.ericsson.net (sessmg22.ericsson.net [193.180.251.58]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 4C402E0 for ; Thu, 5 Apr 2018 12:08:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; d=ericsson.com; s=mailgw201801; c=relaxed/simple; q=dns/txt; i=@ericsson.com; t=1522930112; h=From:Sender:Reply-To:Subject:Date:Message-ID:To:CC:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=oI63wz+ohUkyoIWVzAaYS7lCY7VomwKuHkGTFPRYlhM=; b=FBXrcVNkvE6WP7P91tgxGepmcZXdiNwynCb/pZnrBhyK0f/Qr17hlH8nRstzmFMt R5r1TFDLQwAROKcq+nY5IAn+NjrAD45WhPdZjTcKw8I0gM67bxfFpwt8uLajdmba lBwE0TXxib2xFMG59b9ZhWLfHcS69mXe8+2hJde74JQ=; X-AuditID: c1b4fb3a-e39ff70000005d56-b8-5ac611c0fbe6 Received: from ESESSHC023.ericsson.se (Unknown_Domain [153.88.183.87]) by sessmg22.ericsson.net (Symantec Mail Security) with SMTP id 9B.EA.23894.0C116CA5; Thu, 5 Apr 2018 14:08:32 +0200 (CEST) Received: from ESESSMB501.ericsson.se (153.88.183.162) by ESESSHC023.ericsson.se (153.88.183.87) with Microsoft SMTP Server (TLS) id 14.3.382.0; Thu, 5 Apr 2018 14:08:31 +0200 Received: from ESESSMB504.ericsson.se (153.88.183.165) by ESESSMB501.ericsson.se (153.88.183.162) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1034.26; Thu, 5 Apr 2018 14:08:31 +0200 Received: from EUR02-HE1-obe.outbound.protection.outlook.com (153.88.183.157) by ESESSMB504.ericsson.se (153.88.183.165) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1034.26 via Frontend Transport; Thu, 5 Apr 2018 14:08:31 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=V7+Em0qtSr8sv0bH80zm2XrTbQKkXZ2030jQKX+6DS0=; b=fcc45fBu7dUAJB2c4CnkRBrURUi1JfaojGzLXo7K3Qtv84dAS3pIzLvhZr8gFITInIAKIGh3vXmFPvAhfjc365ijrEQfQ2JqkSd/xKvL2H18ekPkwJXSR+m0Viri7RzubIl+SmJy0nMNDwOZoPKIDCGqI2IuZUbyu4uosS6/nXI= Received: from ubuntu.eed.ericsson.se (129.192.10.2) by DB4PR07MB0653.eurprd07.prod.outlook.com (2a01:111:e400:984c::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.653.5; Thu, 5 Apr 2018 12:08:28 +0000 From: Jan Scheurich To: Date: Wed, 4 Apr 2018 23:57:53 +0200 Message-ID: <1522879074-18830-2-git-send-email-jan.scheurich@ericsson.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1522879074-18830-1-git-send-email-jan.scheurich@ericsson.com> References: <1522879074-18830-1-git-send-email-jan.scheurich@ericsson.com> MIME-Version: 1.0 X-Originating-IP: [129.192.10.2] X-ClientProxiedBy: MRXP264CA0029.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:14::17) To DB4PR07MB0653.eurprd07.prod.outlook.com (2a01:111:e400:984c::17) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0157ef39-f4c8-4c99-4e0b-08d59aedf172 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:DB4PR07MB0653; X-Microsoft-Exchange-Diagnostics: 1; DB4PR07MB0653; 3:ERKt0apE4MIAcqFj6mQ4sc7ngbrNGbUJE+yLTqvMJZRVQ6+A4a5USgSfOJnvWipA+/p9UMk7Em9vimr5354ooH4ezkcoSvQU6iJGmkyA3I9LxiConZvQcnBN9US4L5pWDsgYsW+LIGFhXK5FOG9BetYt+6UVDfoYHjPXB5m5Th8d/xCPq4kP3EYujJHpYvmeCbnL+hILk5hqIOl6wB1GRj/kdECjMZX7r3iJpCuLI5FlMy0MkJiYDPNlKR2pDJtj; 25:NS15jbrcwDb7coN0MRPJEQxWRn4STnqMJxTH/3q7dv6myRXuElLzwnRClUCz9GeEjJb3ur5EGQvWU4cH6HCrevSm6k5RPqd39EBHWTeBg0mMh6irJqCCeghpTLOcXF3uLP9JAHpW9K5XI3rkLHFTM3W3tzy1uAUBt9kR3ufb6Ch9lE7XRpcNBx+e1GSEjz7xpetUtEQ5kQTP56l/M5L2taOgsUcPIl73CtLZ0gAmn5l8J9SNgq/4hPQ+kVyGcZXHnsHZl5hKND1umYX/gR/WtP8wnUhiReRQRDdfOvbVIWhBjnykCluEp8Zz3kGoQHOt7bv1N/tjovlMThiGNEV3OQ==; 31:K5jWLwqwqfKwM9rgVPmDipqmqimPJKHcYKjHkS5HEC5vsLCzHlZRozohvq7unu78OiFiGJ+nVkXiyhYlSKEs1lbPXH1q/pOV/8NqhO0lmAGTbB2cDBbA/jWXOqqxw+zpWgS2mkDyaqchodPCZo31ZJHCB9i4nhRNRuwmMuLZyCe0N0N6YXTMDElpmpywo0YUstK7e+qgrfEYIOGcc49Zgw7c8AJhlkHWHZqmWgAh+4E= X-MS-TrafficTypeDiagnostic: DB4PR07MB0653: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=jan.scheurich@ericsson.com; X-Microsoft-Exchange-Diagnostics: 1; DB4PR07MB0653; 20:E2w0bFqtzpvfbeviftx1iuv/LNHJ8dnsHHud6pF7z3ZkyXamyD8Z1k9kUQZuJe8Fa4Nge5CdDygGgPnEWdSLOdvnCgFJtRcISr0xfFurUekoEdBVK/QdHhiWYDKI5nJdlu3zOdh/hcFs1ukNijH9XT9wX0pmNIUFsRHqgFHoz/6iufnAsC5CI9NoCBDKeZtm446TmEaPPCKtCC6LcLz9HgGNpsoTwJVB41Ah1m3PTNAfiQlRWyvYWVI2kk5EjYQkGHRxBIwH7De0/PqTqzC8yLKUvt3rxk7s4fGgOlX34m0qgFhhGSTXESeJT/HoUjRo0wsUZbF06SsBr93gtLgK/XNyj6ljGAkygWOXvBHT8P/MGnEKBTy5K4LoNHU1fMhcIImMDx51cvJhyR/JXI3S+rlztiCnuISXyAzmEydIAZS6lroJyhm2B6Qd3Z0TmXqdwBDQYDV32eWk9vVOBjsFJjIjGTXLbkQWCU4FdCGWt8w8NXRoE7L/7YFgpkCACTKg; 4:ume+YMIX9LEU/rFWfk9ulAua9KpINSy3nFNEJ4dJiZhZXU2uMqlo2PRgynW2sgFwazH1b5BWF8MPwRpr7CZn3bGUx5x+NWg+wnDkh9WBK4iV/72XbP/VVyjsvcgdfQZ8bZa7Bz9s9NvhpjE5nxgXAt+bi470obkz1Kvs3dKfKZMsXbvzxc/gKKsopoeI1chwgtQs6rbJdNRIwJ96rmZCbqZ8sSSy7s+eG8iY57wugtGYPi1wYnYTrQCYFfyNvDuo1WXNAGQV8u5DwgNLFUC/LadrAeomez5KB3dtL5xjYFyDzvPA03p9Lt8t7vi4Rlsx3LJGOpZBKmJWkJLnrOKpNPI5JDDQAwTuD4ZSskAn6qk= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(37575265505322)(85827821059158); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(10201501046)(3231221)(944501327)(52105095)(93006095)(93001095)(3002001)(6041310)(20161123558120)(20161123562045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(6072148)(201708071742011); SRVR:DB4PR07MB0653; BCL:0; PCL:0; RULEID:; SRVR:DB4PR07MB0653; X-Forefront-PRVS: 06339BAE63 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39380400002)(366004)(396003)(376002)(39860400002)(346002)(199004)(189003)(446003)(6116002)(3846002)(4326008)(11346002)(86362001)(2351001)(7736002)(305945005)(66066001)(8936002)(16586007)(478600001)(316002)(2361001)(50226002)(476003)(2616005)(956004)(6512007)(107886003)(48376002)(53936002)(2906002)(6916009)(486006)(50466002)(6666003)(39060400002)(186003)(16526019)(105586002)(97736004)(6486002)(106356001)(386003)(6506007)(36756003)(26005)(51416003)(5660300001)(68736007)(81156014)(59450400001)(52116002)(76176011)(25786009)(47776003)(81166006)(8676002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB4PR07MB0653; H:ubuntu.eed.ericsson.se; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: ericsson.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB4PR07MB0653; 23:OxyXGKY3F9H5UExUyKUa7r3+wbjXpDl3UYKj9/oRT?= c/zr6Bo//dSsZnboSlKAY+SDf4aWSoNYRSLCPW/7gHW1ct3ab7ulW0T/wj8j+30t3ca6MF/K/UJz5l7y4k4GKYjSjvNdElF1g8zS1Ns+P42/IfwmJatC5E5MwBMLVShD2FuFnEMIQLTTWqkiIA1sUPjmvzYRy8IyMnDIuRwDgc23XwtmvStz9BspXeACOLY2Mf+nxKbV8yM2ZTjNgJHx6r6kGx1LpIUn1QX/VqXGtSXPGIqRa19HLt+wW4TTCsvQMxhJ/WASl2ZDrNEfjagceDmnFZA1EkZjpjB8gzt6S9PmCp9H5c6Xilcy6ZqJO9k1YvAyjmwlv3N0O13LobUHKVgnb6uDAIU+JwqV7xjY5JQ2E3emjkAE9knFKTpHObjzn6U0siNzW1ETo/ZIs/Y0HU+SVKWoSLYmN5EwCEXPfsveuBTcw+VhDbfwQ9kWgNqdRv1S+OQftb/IjrpJwy0qnMj0IkKY0RtTDht2EpGWvRR/izcg2SPJffZptKLtLx9OBQRW8WfpzxlJlWKmecvMspJsEylwBBks1RxCaAwfPXksoRiiQiSnTxhZOwuV1nTei2cAZRxplTHULhoilT0tdqd4hViGVgeSuDYYynBzXdcSLHdvhNuFD7/uW8V95Rlz1GlbK+gGtjvRP4WF9XxlDK75IpNhIZNFivNfkvaPg3433WjhNjW17I+aN0ePGMWzQK1GkwrZZUhSIn+x6VqNPFsHcKtMNSwjOWseeq8LmZ5ikBgnLthxP5qQbuKZgRQ9SYAxC3tYS+dTCba1+ZqHo6CKG93KIwxuMfUneJRJ41VHWNHONa5/sXoEnRmbqIMNv/BS1YjSqRu4Y5IfITxv6h9H02lU/3w7WHCCQc/fytEs38cvxBy0FoGe4xuvHIPRbVVFdb7h1X6N69oY9P6B+evcLiIQWRueTyckrGUt8tSjIhcKcZePz+g5w3dlWYywew4nfyg8VpPo5+1bU2Fey2RqnLtKYS4+stZKtahoDQuTpwnjEvt8MvtZxu68ltrTvVK19gt4ltilX2t4zNnutqT1RIK9U7h4StUWmaOgy7u7Zl7Ntf3yLhYLEPSOBVKrUKBypqRc1rSCQfA1eEIaWz2cw1+4F/MzL1ex87uKk95/wU+sv0qShg4nb80IR+v0IpfltJXm4RczWH3y+//0ZHJXQEoVpOQgDdCGpYtfZoUGJO0Wa6KGidxaIixuPqetuymDi4zX4+r1zbGzLQGiZ+m6+rLiKBVaSHRk58JC2lQiQ== X-Microsoft-Antispam-Message-Info: pVdHZxq49MB2Y3AwfAg4CJG5HipoonqNYhgbKY/9rQKzBFWXdhPiKS4CmyQrD22Uxx5BOgFsCL4ZzGRRfMhOpzwIlWKrwZxJPAEyEsqzJRaxkGl35eTByTs8tpv6q3ClroGCD2itAwtcDQvw0sgqdPaY2WRe831Zw4R+r+R0xY5iln4kTkAYHV9vdzIzYYVg X-Microsoft-Exchange-Diagnostics: 1; DB4PR07MB0653; 6:MTfUo07N23HUHmr7YaFNFHruyOUHwloD6yZp5ifmEixpyQK6HREwfr71o74IRFVaMlxjc8+O90EOQgbv2TeXJ56PyW8O9TeQ7mXLRw/j1XOZqVwjHuDlSgig1ENumrhcggbcKXHrCPaYWSLqQZXzfcSF+Z4KRo26d7aR8dqUALAROGqUrUPOmJ9jivDCu8fm5Hue36NjFoVCLzXrFJWEuNAeHOaV5M+xVgZ0PRVOz2uxt5gRxBjadZYIzQ1AmiDpM+5deZih0qNLiBxPXTyvExrwFa6redTpJspWRgb2gtyNqnbyIuOiVP46k3JhbDIVEjO2VGs4mKmQA8fHvkqgFo3fhsruITW3EQ/8I0IEQsShgoUFU5vxz4Q284MAvFlhhopkvZ8g/Z6nHrvE9w0H4uhND3CqKItaFRxveeW7AS3nH3HEQxqgEM6uLCb1D4ooJWgPPBrsthLtDURI1KABrg==; 5:KXtjFtz+t1vuS/GrkW2+O7DF1j4e81BnwVoTUAtvN5rfnkwSez+l9GSanf67/ry6faKj9MGhrbtGF3RV2AZ3RbY24OZZkLPp8iDzlRFYgH4V5+NqrVw2tEjurroZe8Spb8kLjdAnvYnjc1TA8PIKIlwS0x1pndTtyEapRLovIA0=; 24:GZwAznMliZhMuOEiL0QMHPRikfYe1xayFafMjndSlFQPWJpaMaOVnLWq3a0kAHOY3VcCA0+xnCy8GYYH8VVv+rGFNhA+F2WAkD+GRTp/ecw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB4PR07MB0653; 7:O92LOGsaanZ6alZ95FOYSaTk2AE3dmN5RbgQ7jcOacDMzFNpIhyMKZP7hfNqyRg2hK7eHlwszOzFlVHQDAJYFnaJxuQ3iBVkfqhU7vdza+lsxedL1bz+lOr4+Zjc2sXELhn81MRqAK+g2YbBXA9tpSjKGAArfl+7KJ1z8ofwWrtXx24kKvaHK2Y3dlC1lC9LO+jllauQ3sg+KfYHx2LvfxZygtIPulzBxnN4wt01jnqtMheQWsNXqXUTf/93pXxL X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Apr 2018 12:08:28.7106 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0157ef39-f4c8-4c99-4e0b-08d59aedf172 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR07MB0653 X-OriginatorOrg: ericsson.com X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpkleLIzCtJLcpLzFFi42KZGbE9XPeA4LEog9alShavJjcwWhw9vYfZ YvKUx6wWy/r+sTiweOycdZfd49nN/4wez6/1sAQwR3HZpKTmZJalFunbJXBlvOtazlTws5+x 4terZtYGxkltjF2MnBwSAiYSSx5uYwexhQSOMEps69HsYuQCsjczSkx78JgdwvnGKLG4/wsr hLOESeL/vWPMIA6LwCcmiacbX0BlOpkk7i26y9TFyMHBJmAgMXu3A8hcEQFJiX+Lt7CB2MwC xRKdG3uZQWxhgWCJm6eege1mEVCR2PfxDSuIzSvgJbFy2USo++QkTh6bDBbnFPCW+Pl5PtSt XhKrd7eyQNQLSpyc+YQFYr6ExMEXL5ghehUkNm6ZyQJym4TADEaJPzveskI0q0v8PfSVBaJI VuLo2TlQtq/Esq9b2CEa9jNKLFnzmxnCaWCXWLuqiw2iSktiza91YDajQKxEy9apTBBFS9gl nv7pY4UoypbYuOYRVAPQrWuWM0IULWWWeL7sOhNEQkZi7ufjrBMY9WYh+WMWkj8WMDKtYhQt Ti0uzk03MtJLLcpMLi7Oz9PLSy3ZxAhMGAe3/LbawXjwueMhRgEORiUeXnfOY1FCrIllxZW5 hxglOJiVRHhZm49GCfGmJFZWpRblxxeV5qQWH2KU5mBREud1SrOIEhJITyxJzU5NLUgtgsky cXBKNTCaLK/dWfHpxoKppqzvQsI5RPOj2E5oTizbrfrw1IPywiyZRB1LPeEQVY0pcsHTRc7Y ilzxe1k9wfs4/yL++tik09clHaJc459kdOTsnjLZ6DKz4l7u0I2KBSt9+23zj624Y+DY9fSs Z2Ppoxtye84LLwk5E2vYwnGH44iU6dK6ORK7U2665SmxFGckGmoxFxUnAgAhPYwiFAMAAA== X-Spam-Status: No, score=-3.3 required=5.0 tests=BAYES_00, DATE_IN_PAST_12_24, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: [ovs-dev] [PATCH v4 1/2] tests: Inject ARP replies for snoop tests on different port 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: , Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org From: Zoltan Balogh The ARP replies injected into the underlay bridge 'br0' to trigger ARP snooping should be destined to the the bridges LOCAL port. So far the tests injected them on LOCAL port 'br0' itself, which didn't matter as OVS snooped on all ARP packets passing the bridge. This patch injects the ARP replies on a different port in preparation for an upcoming commit that will make OVS only snoop on ARP packets output to the LOCAL port. The clone() wrapper must be added to the generated datapath flows now as the traced packets would actually be transmitted through the tunnel port. Previously the underlay bridge dropped the packets as the learned egress port for the tunnel nexthop was the LOCAL port, which also served as virtual ingress port for the encapsulated traffic. The translation end result was an expensive way to say 'drop'. Signed-off-by: Zoltan Balogh Co-authored-by: Jan Scheurich Signed-off-by: Jan Scheurich --- tests/tunnel-push-pop-ipv6.at | 14 +++++++------- tests/tunnel-push-pop.at | 24 ++++++++++++------------ 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/tests/tunnel-push-pop-ipv6.at b/tests/tunnel-push-pop-ipv6.at index 7ca522a..29bc1f3 100644 --- a/tests/tunnel-push-pop-ipv6.at +++ b/tests/tunnel-push-pop-ipv6.at @@ -55,9 +55,9 @@ AT_CHECK([cat p0.pcap.txt | grep 93aa55aa55000086dd6000000000203aff2001cafe | un ]) dnl Check ARP Snoop -AT_CHECK([ovs-appctl netdev-dummy/receive br0 'in_port(100),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:cafe::92,dst=2001:cafe::94,label=0,proto=58,tclass=0,hlimit=255,frag=no),icmpv6(type=136,code=0),nd(target=2001:cafe::92,sll=00:00:00:00:00:00,tll=f8:bc:12:44:34:b6)']) +AT_CHECK([ovs-appctl netdev-dummy/receive p0 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:cafe::92,dst=2001:cafe::94,label=0,proto=58,tclass=0,hlimit=255,frag=no),icmpv6(type=136,code=0),nd(target=2001:cafe::92,sll=00:00:00:00:00:00,tll=f8:bc:12:44:34:b6)']) -AT_CHECK([ovs-appctl netdev-dummy/receive br0 'in_port(100),eth(src=f8:bc:12:44:34:b7,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:cafe::93,dst=2001:cafe::94,label=0,proto=58,tclass=0,hlimit=255,frag=no),icmpv6(type=136,code=0),nd(target=2001:cafe::93,sll=00:00:00:00:00:00,tll=f8:bc:12:44:34:b7)']) +AT_CHECK([ovs-appctl netdev-dummy/receive p0 'in_port(1),eth(src=f8:bc:12:44:34:b7,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:cafe::93,dst=2001:cafe::94,label=0,proto=58,tclass=0,hlimit=255,frag=no),icmpv6(type=136,code=0),nd(target=2001:cafe::93,sll=00:00:00:00:00:00,tll=f8:bc:12:44:34:b7)']) AT_CHECK([ovs-appctl tnl/arp/show | tail -n+3 | sort], [0], [dnl 2001:cafe::92 f8:bc:12:44:34:b6 br0 @@ -93,28 +93,28 @@ dnl Check VXLAN tunnel push AT_CHECK([ovs-ofctl add-flow int-br action=2]) AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:01),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout]) AT_CHECK([tail -1 stdout], [0], - [Datapath actions: tnl_push(tnl_port(4789),header(size=70,type=4,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=17,tclass=0x0,hlimit=64),udp(src=0,dst=4789,csum=0xffff),vxlan(flags=0x8000000,vni=0x7b)),out_port(100)) + [Datapath actions: clone(tnl_push(tnl_port(4789),header(size=70,type=4,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=17,tclass=0x0,hlimit=64),udp(src=0,dst=4789,csum=0xffff),vxlan(flags=0x8000000,vni=0x7b)),out_port(100)),1) ]) dnl Check VXLAN tunnel push set tunnel id by flow and checksum AT_CHECK([ovs-ofctl add-flow int-br "actions=set_tunnel:124,4"]) AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:01),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout]) AT_CHECK([tail -1 stdout], [0], - [Datapath actions: tnl_push(tnl_port(4789),header(size=70,type=4,eth(dst=f8:bc:12:44:34:b7,src=aa:55:aa:55:00:00,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::93,label=0,proto=17,tclass=0x0,hlimit=64),udp(src=0,dst=4789,csum=0xffff),vxlan(flags=0x8000000,vni=0x7c)),out_port(100)) + [Datapath actions: clone(tnl_push(tnl_port(4789),header(size=70,type=4,eth(dst=f8:bc:12:44:34:b7,src=aa:55:aa:55:00:00,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::93,label=0,proto=17,tclass=0x0,hlimit=64),udp(src=0,dst=4789,csum=0xffff),vxlan(flags=0x8000000,vni=0x7c)),out_port(100)),1) ]) dnl Check GRE tunnel push AT_CHECK([ovs-ofctl add-flow int-br action=3]) AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:01),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout]) AT_CHECK([tail -1 stdout], [0], - [Datapath actions: tnl_push(tnl_port(3),header(size=62,type=3,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=47,tclass=0x0,hlimit=64),gre((flags=0x2000,proto=0x6558),key=0x1c8)),out_port(100)) + [Datapath actions: clone(tnl_push(tnl_port(3),header(size=62,type=3,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=47,tclass=0x0,hlimit=64),gre((flags=0x2000,proto=0x6558),key=0x1c8)),out_port(100)),1) ]) dnl Check Geneve tunnel push AT_CHECK([ovs-ofctl add-flow int-br "actions=set_field:2001:cafe::92->tun_ipv6_dst,5"]) AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:01),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout]) AT_CHECK([tail -1 stdout], [0], - [Datapath actions: tnl_push(tnl_port(6081),header(size=70,type=5,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=17,tclass=0x0,hlimit=64),udp(src=0,dst=6081,csum=0xffff),geneve(vni=0x7b)),out_port(100)) + [Datapath actions: clone(tnl_push(tnl_port(6081),header(size=70,type=5,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=17,tclass=0x0,hlimit=64),udp(src=0,dst=6081,csum=0xffff),geneve(vni=0x7b)),out_port(100)),1) ]) dnl Check Geneve tunnel push with options @@ -122,7 +122,7 @@ AT_CHECK([ovs-ofctl add-tlv-map int-br "{class=0xffff,type=0x80,len=4}->tun_meta AT_CHECK([ovs-ofctl add-flow int-br "actions=set_field:2001:cafe::92->tun_ipv6_dst,set_field:0xa->tun_metadata0,5"]) AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:01),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout]) AT_CHECK([tail -1 stdout], [0], - [Datapath actions: tnl_push(tnl_port(6081),header(size=78,type=5,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=17,tclass=0x0,hlimit=64),udp(src=0,dst=6081,csum=0xffff),geneve(crit,vni=0x7b,options({class=0xffff,type=0x80,len=4,0xa}))),out_port(100)) + [Datapath actions: clone(tnl_push(tnl_port(6081),header(size=78,type=5,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=17,tclass=0x0,hlimit=64),udp(src=0,dst=6081,csum=0xffff),geneve(crit,vni=0x7b,options({class=0xffff,type=0x80,len=4,0xa}))),out_port(100)),1) ]) dnl Check decapsulation of GRE packet diff --git a/tests/tunnel-push-pop.at b/tests/tunnel-push-pop.at index cc8b1b5..d43f622 100644 --- a/tests/tunnel-push-pop.at +++ b/tests/tunnel-push-pop.at @@ -70,8 +70,8 @@ ffffffffffffaa55aa55000008060001080006040001aa55aa550000010102580000000000000101 ]) dnl Check ARP Snoop -AT_CHECK([ovs-appctl netdev-dummy/receive br0 'recirc_id(0),in_port(100),eth(src=f8:bc:12:44:34:b6,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=1.1.2.92,tip=1.1.2.88,op=2,sha=f8:bc:12:44:34:b6,tha=00:00:00:00:00:00)']) -AT_CHECK([ovs-appctl netdev-dummy/receive br0 'recirc_id(0),in_port(100),eth(src=f8:bc:12:44:34:b7,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=1.1.2.93,tip=1.1.2.88,op=2,sha=f8:bc:12:44:34:b7,tha=00:00:00:00:00:00)']) +AT_CHECK([ovs-appctl netdev-dummy/receive p0 'recirc_id(0),in_port(1),eth(src=f8:bc:12:44:34:b6,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=1.1.2.92,tip=1.1.2.88,op=2,sha=f8:bc:12:44:34:b6,tha=00:00:00:00:00:00)']) +AT_CHECK([ovs-appctl netdev-dummy/receive p0 'recirc_id(0),in_port(1),eth(src=f8:bc:12:44:34:b7,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=1.1.2.93,tip=1.1.2.88,op=2,sha=f8:bc:12:44:34:b7,tha=00:00:00:00:00:00)']) AT_CHECK([ovs-appctl tnl/neigh/show | tail -n+3 | sort], [0], [dnl 1.1.2.92 f8:bc:12:44:34:b6 br0 @@ -113,49 +113,49 @@ dnl Check VXLAN tunnel push AT_CHECK([ovs-ofctl add-flow int-br action=2]) AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout]) AT_CHECK([tail -1 stdout], [0], - [Datapath actions: tnl_push(tnl_port(4789),header(size=50,type=4,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=4789,csum=0x0),vxlan(flags=0x8000000,vni=0x7b)),out_port(100)) + [Datapath actions: clone(tnl_push(tnl_port(4789),header(size=50,type=4,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=4789,csum=0x0),vxlan(flags=0x8000000,vni=0x7b)),out_port(100)),1) ]) dnl Check VXLAN GPE tunnel push AT_CHECK([ovs-ofctl add-flow int-br action=8]) AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:01),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout]) AT_CHECK([tail -1 stdout], [0], - [Datapath actions: tnl_push(tnl_port(4789),header(size=50,type=4,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=4789,csum=0x0),vxlan(flags=0xc000003,vni=0x159)),out_port(100)) + [Datapath actions: clone(tnl_push(tnl_port(4789),header(size=50,type=4,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=4789,csum=0x0),vxlan(flags=0xc000003,vni=0x159)),out_port(100)),1) ]) dnl Check VXLAN tunnel push set tunnel id by flow and checksum AT_CHECK([ovs-ofctl add-flow int-br "actions=set_tunnel:124,4"]) AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout]) AT_CHECK([tail -1 stdout], [0], - [Datapath actions: tnl_push(tnl_port(4789),header(size=50,type=4,eth(dst=f8:bc:12:44:34:b7,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.93,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=4789,csum=0xffff),vxlan(flags=0x8000000,vni=0x7c)),out_port(100)) + [Datapath actions: clone(tnl_push(tnl_port(4789),header(size=50,type=4,eth(dst=f8:bc:12:44:34:b7,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.93,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=4789,csum=0xffff),vxlan(flags=0x8000000,vni=0x7c)),out_port(100)),1) ]) dnl Check GRE tunnel push AT_CHECK([ovs-ofctl add-flow int-br action=3]) AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout]) AT_CHECK([tail -1 stdout], [0], - [Datapath actions: tnl_push(tnl_port(3),header(size=42,type=3,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x2000,proto=0x6558),key=0x1c8)),out_port(100)) + [Datapath actions: clone(tnl_push(tnl_port(3),header(size=42,type=3,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x2000,proto=0x6558),key=0x1c8)),out_port(100)),1) ]) dnl Check L3GRE tunnel push AT_CHECK([ovs-ofctl add-flow int-br action=7]) AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:01),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout]) AT_CHECK([tail -1 stdout], [0], - [Datapath actions: pop_eth,tnl_push(tnl_port(3),header(size=42,type=3,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x2000,proto=0x800),key=0x1c8)),out_port(100)) + [Datapath actions: pop_eth,clone(tnl_push(tnl_port(3),header(size=42,type=3,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x2000,proto=0x800),key=0x1c8)),out_port(100)),1) ]) dnl Check Geneve tunnel push AT_CHECK([ovs-ofctl add-flow int-br "actions=set_field:1.1.2.92->tun_dst,5"]) AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout]) AT_CHECK([tail -1 stdout], [0], - [Datapath actions: tnl_push(tnl_port(6081),header(size=50,type=5,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=6081,csum=0x0),geneve(vni=0x7b)),out_port(100)) + [Datapath actions: clone(tnl_push(tnl_port(6081),header(size=50,type=5,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=6081,csum=0x0),geneve(vni=0x7b)),out_port(100)),1) ]) dnl Check Geneve tunnel push with pkt-mark AT_CHECK([ovs-ofctl add-flow int-br "actions=set_tunnel:234,6"]) AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout]) AT_CHECK([tail -1 stdout], [0], - [Datapath actions: set(skb_mark(0x4d2)),tnl_push(tnl_port(6081),header(size=50,type=5,eth(dst=f8:bc:12:44:34:b7,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.93,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=6081,csum=0x0),geneve(vni=0xea)),out_port(100)) + [Datapath actions: set(skb_mark(0x4d2)),clone(tnl_push(tnl_port(6081),header(size=50,type=5,eth(dst=f8:bc:12:44:34:b7,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.93,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=6081,csum=0x0),geneve(vni=0xea)),out_port(100)),1) ]) dnl Check Geneve tunnel push with options @@ -163,7 +163,7 @@ AT_CHECK([ovs-ofctl add-tlv-map int-br "{class=0xffff,type=0x80,len=4}->tun_meta AT_CHECK([ovs-ofctl add-flow int-br "actions=set_field:1.1.2.92->tun_dst,set_field:0xa->tun_metadata0,5"]) AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout]) AT_CHECK([tail -1 stdout], [0], - [Datapath actions: tnl_push(tnl_port(6081),header(size=58,type=5,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=6081,csum=0x0),geneve(crit,vni=0x7b,options({class=0xffff,type=0x80,len=4,0xa}))),out_port(100)) + [Datapath actions: clone(tnl_push(tnl_port(6081),header(size=58,type=5,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=6081,csum=0x0),geneve(crit,vni=0x7b,options({class=0xffff,type=0x80,len=4,0xa}))),out_port(100)),1) ]) dnl Check decapsulation of GRE packet @@ -312,7 +312,7 @@ AT_CHECK([ovs-appctl ovs/route/add 1.1.2.92/24 br0], [0], [OK AT_CHECK([ovs-ofctl add-flow br0 'arp,priority=1,action=normal']) dnl Use arp reply to achieve tunnel next hop mac binding -AT_CHECK([ovs-appctl netdev-dummy/receive br0 'recirc_id(0),in_port(100),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0806),arp(sip=1.1.2.92,tip=1.1.2.88,op=2,sha=f8:bc:12:44:34:b6,tha=00:00:00:00:00:00)']) +AT_CHECK([ovs-appctl netdev-dummy/receive p0 'recirc_id(0),in_port(1),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0806),arp(sip=1.1.2.92,tip=1.1.2.88,op=2,sha=f8:bc:12:44:34:b6,tha=00:00:00:00:00:00)']) AT_CHECK([ovs-appctl tnl/neigh/show | tail -n+3 | sort], [0], [dnl 1.1.2.92 f8:bc:12:44:34:b6 br0 @@ -325,7 +325,7 @@ AT_CHECK([ovs-ofctl add-flow int-br action=3]) AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=17,tos=0,ttl=64,frag=no),udp(src=51283,dst=4789)'], [0], [stdout]) AT_CHECK([tail -1 stdout], [0], - [Datapath actions: tnl_push(tnl_port(3),header(size=42,type=3,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x2000,proto=0x6558),key=0x1c8)),out_port(100)) + [Datapath actions: clone(tnl_push(tnl_port(3),header(size=42,type=3,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x2000,proto=0x6558),key=0x1c8)),out_port(100)),1) ]) dnl Verify outer L2 and L3 header flow fields can be matched in the underlay bridge From patchwork Wed Apr 4 21:57:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Scheurich X-Patchwork-Id: 895365 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; dmarc=fail (p=none dis=none) header.from=ericsson.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ericsson.com header.i=@ericsson.com header.b="LMQP2GTO"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ericsson.com header.i=@ericsson.com header.b="Uyg25JFv"; 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 40H1ps42qRz9s0n for ; Thu, 5 Apr 2018 22:09:41 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 6B209C19; Thu, 5 Apr 2018 12:08:39 +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 C0543C14 for ; Thu, 5 Apr 2018 12:08:36 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from sessmg23.ericsson.net (sessmg23.ericsson.net [193.180.251.45]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 8F93017E for ; Thu, 5 Apr 2018 12:08:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; d=ericsson.com; s=mailgw201801; c=relaxed/simple; q=dns/txt; i=@ericsson.com; t=1522930112; h=From:Sender:Reply-To:Subject:Date:Message-ID:To:CC:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=8twDFlbsDaMeRcfehSvYoSKp3ZEvEdCYjnSpB9x/0U0=; b=LMQP2GTOM6OUTVKdwGbYyBP86JlJiimiBvHo0LvWPvSDL1W6ZZtAuh6wsZCYoWlq Mz2/yPMtGqD31QJOGBVoSfxRhqT7SRueCF9fa1AWkd/ZlnSnI5NeBZmbE3qIrTT1 C4qFIuxTjFBwMw2b77MHJI+G5V25Tr7l/zcnZk9HYXg=; X-AuditID: c1b4fb2d-e31ff700000073d9-10-5ac611c0d193 Received: from ESESSHC019.ericsson.se (Unknown_Domain [153.88.183.75]) by sessmg23.ericsson.net (Symantec Mail Security) with SMTP id 19.E6.29657.0C116CA5; Thu, 5 Apr 2018 14:08:32 +0200 (CEST) Received: from ESESSMB501.ericsson.se (153.88.183.162) by ESESSHC019.ericsson.se (153.88.183.75) with Microsoft SMTP Server (TLS) id 14.3.382.0; Thu, 5 Apr 2018 14:08:32 +0200 Received: from ESESSMB504.ericsson.se (153.88.183.165) by ESESSMB501.ericsson.se (153.88.183.162) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1034.26; Thu, 5 Apr 2018 14:08:31 +0200 Received: from EUR02-HE1-obe.outbound.protection.outlook.com (153.88.183.157) by ESESSMB504.ericsson.se (153.88.183.165) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1034.26 via Frontend Transport; Thu, 5 Apr 2018 14:08:31 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=HdYzgqrLqYCRB9xKcZKmCNDddoYbOQrNshzOQ6SVDD8=; b=Uyg25JFvTrtXHyyzG+qaVeRTvW3KSLvliTsFBJRnIw+vyl9yCzGywNrhy9vfgCLvLgj9TN4pzBamrqDtHB681h2l7RWwSLqaj3bHTT2vBKxxLt6j960wX32sNQfsqdyrdGcJrYnBw77hNBs0FAP3WJcpXdxEFYo2qjGpCw+spQQ= Received: from ubuntu.eed.ericsson.se (129.192.10.2) by DB4PR07MB0653.eurprd07.prod.outlook.com (2a01:111:e400:984c::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.653.5; Thu, 5 Apr 2018 12:08:29 +0000 From: Jan Scheurich To: Date: Wed, 4 Apr 2018 23:57:54 +0200 Message-ID: <1522879074-18830-3-git-send-email-jan.scheurich@ericsson.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1522879074-18830-1-git-send-email-jan.scheurich@ericsson.com> References: <1522879074-18830-1-git-send-email-jan.scheurich@ericsson.com> MIME-Version: 1.0 X-Originating-IP: [129.192.10.2] X-ClientProxiedBy: MRXP264CA0029.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:14::17) To DB4PR07MB0653.eurprd07.prod.outlook.com (2a01:111:e400:984c::17) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: da0b4dea-8cbe-4ba7-2694-08d59aedf1ee X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:DB4PR07MB0653; X-Microsoft-Exchange-Diagnostics: 1; DB4PR07MB0653; 3:2WA6yu/sms/+SswnAUmLc4rewZfAgtSjgaXPnF36XFZAhvDNsB5rOG6IhSFjpPp6JB5H4Ol7Y85B9tKcnkk1FH46SQJGT26rnG4CVt9CdY3nZ3PPwMCvsd6PRwxNq6+wEDJXVVi0wJIjNPFgri0P8DmpgXZvxQU/2klm5zzbzYc7msJfYnArzIVW6XT469fxsqa3Z7TnbsohgyHhXaDWf6zFaUbiWUbY6ziS0WtKimbV4Gkh9pMnmhYKhGW/DOZk; 25:qAmb9QhvJVqDjpemDfscBen9uXIuctmZMzl+rHbYwCrOFxeiYRRsjN4xuFoRAZEnDZfYNVvqyFY33flrC9QLSdQ8acXrIlHaoz306rnVzwCoa0g5orVMWyWNsHTKi5Snkhyh3nIF+oflDgyMaLJubaPI6W5N1w1SA8nuENwZHi0hx+d4f4xVsEhJLMZD7zH3hp5zIGVEOkeeHIAxoswN7UNpP1uX1RNm1djc5gaG4bX3W5YLreeHoZC0IPvPLGGi/xDiHhxB5Qxugfk6IaaQVD9I3kq+XtTuP2CPvIdpFMx61PRiidcUXsKfgpipPMX9/Rq/Jzs0FjEietEWamiN2Q==; 31:d9iIN33PRZEHEqeX8j9PLbHYTu8fYcSYN2YSyRAP2jA8UD9C1T06CxhyZZ0Rk2vLeUhIfsRAfjD8FmYtgzcELgtQC8WR18ba8etOqPTIg0wmdbd4eb2GiinvWZzLk9OEMxoExPv2pGsxC8gI0oVZ8TaA/iZTny7VKUoHUt4e5g9rE2yxxkTkVh68qcgFopUPIwPRknvuSgHKSQbVBNzd4H5rCxTnxGGSKpQ4xwGQdbo= X-MS-TrafficTypeDiagnostic: DB4PR07MB0653: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=jan.scheurich@ericsson.com; X-Microsoft-Exchange-Diagnostics: 1; DB4PR07MB0653; 20:r/wxYDnoCtALTkAWFOx9puVn7KajvIk5QhS/M1DeZ1aJ9ZHOTBQF+O2PbFQ06gjepem1oStkswfPquJe8gd2OQgO+HWeWJfIYQMyTeBvRHe9Cb7Hr3VjxNL4g7K0PtAD90IlbTDwMsNlgcbEyQb0pBH20prCDxq7UFi+8wB/arvJyEW65d1dHfDkZvwb7rtP5lkoPsiQJ+jNvfHXtTnQEllRqg9LZCWADr8HKlwHIK+FvtD8rfLQL/9cyxSswkRVIigPvE9scRRjThX/acfhS0UI7CuBSmypiCYmE9jAtCPfncLkcA9BiXEAM10RZlvLw3H8FfGdO29pnenjUTvZUvpHdcZX+Wr2DoT2V9fLt9Oom8W6naJKqL6oiExJ466bX8qJiGiAKoAj+eZLjF7rql32wlWKZna/4mozBdN0dxylkEUYJnKvuZbC9Pmqjclzex7p6ySLJg4S1BWDdLLGY38D5raXjR/uIsmhn72k3oeLK5G28bmYk2Iy04Lf9GHg; 4:14XjLPniDkKaqSZcKHvu0Vu/TkMgMc1QrHpl92/pTZcxoFpr7Kk31Hys/ndaFHEZxZ32yTsNzDn8QLAIyeXsb1DM8n7rt6y6VCndbADad37QlzQYwGRd3efYClaa6w71pCDc3ElErQjfrZuckvahepneRA0DSD/jrmSGWl2tR0muAOwyZ8+3JDcVENvRmwrBBg80uMDqhqU/Pn104yfDHqrFE4xIYvfTQ3n3pQ2VlJdcpTa94GDNLMdPspJYZ6cRBI/fIRhZMi3U8wplj4LeZ13R+48ozbGLLqe3zQCKjfA2tEDYMGxOdNkbpr65/yS78ElaAF9d5MxT4Zk6OJ7KNh2S5wR8YwJ/6uqxlyiDRMk9Zr6xfjt40oc7ngHcaFMZ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(37575265505322)(131327999870524)(85827821059158); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(10201501046)(3231221)(944501327)(52105095)(93006095)(93001095)(3002001)(6041310)(20161123558120)(20161123562045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(6072148)(201708071742011); SRVR:DB4PR07MB0653; BCL:0; PCL:0; RULEID:; SRVR:DB4PR07MB0653; X-Forefront-PRVS: 06339BAE63 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39380400002)(366004)(396003)(376002)(39860400002)(346002)(199004)(189003)(446003)(6116002)(3846002)(4326008)(11346002)(86362001)(2351001)(7736002)(305945005)(66066001)(8936002)(16586007)(478600001)(316002)(2361001)(50226002)(476003)(2616005)(956004)(6512007)(107886003)(48376002)(53936002)(2906002)(6916009)(486006)(50466002)(6666003)(39060400002)(186003)(16526019)(105586002)(97736004)(6486002)(106356001)(386003)(6506007)(36756003)(26005)(51416003)(5660300001)(68736007)(81156014)(59450400001)(52116002)(76176011)(25786009)(47776003)(81166006)(8676002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB4PR07MB0653; H:ubuntu.eed.ericsson.se; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: ericsson.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB4PR07MB0653; 23:PXarM3Qf0GnKJB2E6p++7R0rxaT+z3UANqvZLt/c0?= nrrGQYy0w562pviDnzyb50GpQGVvkbqp+9lYH8RzxMDzqtYHCty5lByfMWg98hA5UQgcww/rJuktZykY0/fgBaf7AVevqGFt1CbWRTTvUjegpAr9PFh547Mss2ET/cRc/2bmmaE+MeJq/5zq2CgDj44d+uWRDY5pEbCHJxX/Qw1unLzrEyLS03P4ZRM0wyAyWP9i2zdDoKsdAFL/rcBlcex5nwOmaAVBCrGin6cKhqiENPadgc791lPS7GYjqRu8ZPIg3MOWf+OWWLw75i2LlwJvfXqGClabyzU/GdkTkNc8zjH9p9k1mDYNE/pNF22xLxILwcRM0EHLudU/ibl+5qU/ylbSQ1HUEnrW4aWYEr9ZW7K400vGTVVLlNtetsXQAHQRTa3z/nftVnqpt21+rghVi5drFCybJ+fZoFnhi8NxspesqXjUCyLRtXaHboJgplf0/B1HeL6hN93oCbOAPvjaWLVcewTskUy/3DBAaFyB9vzh6fAD7WbZ2wNMrGD+t7wyju3ibb837HIkRDK1r0BD4kWDPLqHAhlSCh8UPezyh1NWDFHdSzsZ9kUXyq9j9PtXgnoG5mPnuJu6rUr/dAwMLaN8yDXO5X9VsOHGB4EXsanQH3Y6dWz/jFCwX1kFOrQi75Zqkl2t3pr8TCPS8/WeG1x/IykanMG8viSCC4cPm5xdVm9xlHo70oeBInOj1sDHD1fjnOnyak/vrcNbHv3i0yxnF/QEQPCNx+6yvgt5d6vyYGYMgLPl+jNo3XyDCgTsiyGnaxHtP4AmmlaSXo/f6WppNWMKz19Ty6tiF094LjBcdchpgLyCQU1TJr/+d/iDbO/BMcsAg/IuZK4RoN5IVoWf3IqZHMjpe0R2YeB/7CBHc0xr3hcmlP33OBqg659GaRuHvYoJqpiAdLd8i0CFMVq8wFpFBQP9rSt3l72Ndc9qrPMAYEhpobHNbxPTUgqxE9RtSO1q93SGd/eiTgnVefaEdqaxMZDwHPmmcLf3g71/5AxfEy7xik8h4FrFpNYyD6uY+e+VHkPD6JBncLoeoet6VON6Pafn/cHSVW/MZ1wwZrg9Xh4Fn1RnfB+wuURwkfMFSvI9flHofwM3XUJIayOlh8590lWWar5BPUKtRQHLhij3r6lhQO/GkFo/5PK+iZDHFDZ/QII6hEBAWIKRU31YwOzj6J2Xqk8kuxzunxi4Y4GaGQ67Jg4a+OQzZUvaWG5iYgblBIuV3n2s2CNo4VGpl4ppYbnJMPe+QBskA== X-Microsoft-Antispam-Message-Info: ibLfP5zQpjEY68T29LKVorUsUBve9/iwDSMt4sn2MCKG/7mmuOSuRAyeJzuE/LTU4/d8n9RDc3sMOITds4sUcwjAzzEFCmrmFEmb9tBQYnKDuWWBrj6//x1Er6fBXVU5sjSqpT5NMnNNA8e9CBJamMJUv4YhPg7tmYeOfzcG2BSUUCcJLVnUYAI+Csp+OmrG X-Microsoft-Exchange-Diagnostics: 1; DB4PR07MB0653; 6:nSv4/HNcdFqvu+pvMQJZeQc7oIQ5ZPBjrMMiiVGlIdyayriNkdaNP3EuTTrtU+oENz2VLO2JZd9KXAhLjzjsvpEttnBtrEGeR4DVNDJU3Yr2rv5q+VWZJo7I2OM4+D6a8K+DeD8I8OFTdpd7pVL9x5NDZnZCyJGioKiTyGDWTyjywr/SSh9RmDmCXO4mP1DtaMNgRhuVnll2Rio/XCPasrpa0nmqAHivIh9/ggkFGcLMwYjyOKITHpPXpC+OIejxe+pXn4eAyA9MjL5t65EY3/z90Ck62EfJeM3WiYPYT8uKJ+x4ueZNPzL0El4Yw3Km+WqA9F3oM7wzV8WO0lWlFOvu2ztjHFyw8GigoRjNj8U+VJZRNs1T6TPdiYDaO3tZoAo0NTMFE1Q78PNBm4YdonlnoeIeXv3Q9I3t+v11K9Olhz6epvqNnZqDQ3CxZqrs/4YbOS9f+uEZBuKBRfWRqA==; 5:xHGOdWDxVqN8Q/YB3dKnJwFOaHPAVa4YsytLJ7DenzjM6OBCkD4acRFjmtLjxiCzzvAL9f4tp73WLtnpkXxs5JmacJSbsABTo3UwHFImjUJ4B8WgF/DSSERRDyeWwbxFWeA86qFkF9C4q0yrJKbGsyGGnEVMhNy4CE4o98VHFuU=; 24:U7ES2kTWk1l1b9UWYdUvEqwOpxLWQh6ogWaz/6Vdfz0o/8RIFfKhuisfDxEfFiOEe1gWpzZ58OD4TDAEbntfehNXiXwDlOwju413Qnlz6rE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB4PR07MB0653; 7:9lj/J6H23cwACuOVUZz6Igs/5IRGIMYNHpW29G4rxqmPwi141anEcpTOU5lsFnGaw06sKH3fRmgeJhXUX4wlF2DkReBP8YOT5UV2uMgFKgqPx5AYr1Wo4gxDDAOE6qoo2QqZVYHdYts+7/PMSUZ2OD+Il1PkMlsMGpAncrdi2HxQyaMgTDtxLBJR+/pdg6B6ho9ziY9uqh4U5JNUo1DHSeIW0b1Mm/Z3e16j+0j3szwFEIOH8m5kmaZE8s/9xGGc X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Apr 2018 12:08:29.5483 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: da0b4dea-8cbe-4ba7-2694-08d59aedf1ee X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR07MB0653 X-OriginatorOrg: ericsson.com X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrPIsWRmVeSWpSXmKPExsUyM2K7t+4BwWNRBhvvG1u8mtzAaHH09B5m i8lTHrNaLOv7x+LA4rFz1l12j2c3/zN6PL/WwxLAHMVlk5Kak1mWWqRvl8CV0bJJuODNesaK fxP/sjcw7uhm7GLk5JAQMJFY1bKJtYuRi0NI4AijxJkVi5ghnM2MEl+XtUM53xglFvd/gSpb wiTx/94xsAyLwCcmiVlLl7BAZDqZJC4/bmLqYuTgYBMwkJi92wFkiYiApMS/xVvYQGxmgWKJ zo29zCAlwgJBEk1H/UDCLAIqEhP3/AS7iVfAS6Jv7gkWiPvkJE4em8wKYnMKeEv8/DyfHcQW AqpZvbuVBaJeUOLkzCcsEOMlJA6+eMEM0asgsXHLTLDTJARmMEr82fGWFaJZXeLvoa9QC2Ql jp6dA2X7SrRemgjVsJ9RYsma38wQTgO7xNM329ghqrQk1vxaB/YNo0CsRMvWqUwQRTvYJe4s PMgKUZQtcfz9dXaQNyUEoiWeX7SDqFnKLPF82XUmiBoZibmfj7NOYNSbheSNWUjeWMDItIpR tDi1uDg33chYL7UoM7m4OD9PLy+1ZBMjMFkc3PJbdwfj6teOhxgFOBiVeHiluY5FCbEmlhVX 5h5ilOBgVhLhZW0+GiXEm5JYWZValB9fVJqTWnyIUZqDRUmcV2/VnighgfTEktTs1NSC1CKY LBMHp1QD49IKpvmHPSPl50758vSiL9PBIsHaF0t7p99z0mbx+u5umL3ApvLm6XyHn72cM5da 1shUG2/KerFR6UbkWqNs1sNHBJPebtmU8d+rzu+KbodNh+EXwzYJGZVu5Xs7Lh5V6bMoP3BE TIvrqRLXbfOAM+HxKVfj3QPO6AQx3hZ5+dv+/arpFRdFlViKMxINtZiLihMBuBcDtxIDAAA= X-Spam-Status: No, score=-3.3 required=5.0 tests=BAYES_00, DATE_IN_PAST_12_24, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: [ovs-dev] [PATCH v4 2/2] xlate: Move tnl_neigh_snoop() to terminate_native_tunnel() 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: , Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org From: Zoltan Balogh Currently OVS snoops any ARP or ND packets in any bridge and populates the tunnel neighbor cache with the retreived data. For instance, when an ARP reply originated by a tenant is received in an overlay bridge, the ARP packet is snooped and tunnel neighbor cache is filled with tenant address information. This is at best useless as tunnel endpoints can only reside on an underlay bridge. The real problem starts if different tenants on the overlay bridge have overlapping IP addresses such that they keep overwriting each other's pseudo tunnel neighbor entries. These frequent updates are treated as configuration changes and trigger revalidation each time, thus causing a lot of useless revalidation load on the system. To keep the ARP neighbor cache clean, this patch moves tunnel neighbor snooping from the generic function do_xlate_actions() to the specific funtion terminate_native_tunnel() in compose_output_action(). Thus, only ARP and Neighbor Advertisement packets addressing a local tunnel endpoint (on the LOCAL port of the underlay bridge) are snooped. In order to achieve this, IP addresses of the bridge ports are retrieved and then stored in xbridge by calling xlate_xbridge_set(). The destination address extracted from the ARP or Neighbor Advertisement packet is then matched against the known xbridge addresses in is_neighbor_reply_correct() to filter the snooped packets further. Signed-off-by: Zoltan Balogh Co-authored-by: Jan Scheurich Signed-off-by: Jan Scheurich --- include/sparse/netinet/in.h | 10 +++ ofproto/ofproto-dpif-xlate.c | 147 ++++++++++++++++++++++++++++++++++++++++-- tests/tunnel-push-pop-ipv6.at | 68 ++++++++++++++++++- tests/tunnel-push-pop.at | 67 ++++++++++++++++++- 4 files changed, 282 insertions(+), 10 deletions(-) diff --git a/include/sparse/netinet/in.h b/include/sparse/netinet/in.h index 6abdb23..eea41bd 100644 --- a/include/sparse/netinet/in.h +++ b/include/sparse/netinet/in.h @@ -123,6 +123,16 @@ struct sockaddr_in6 { (X)->s6_addr[10] == 0xff && \ (X)->s6_addr[11] == 0xff) +#define IN6_IS_ADDR_MC_LINKLOCAL(a) \ + (((const uint8_t *) (a))[0] == 0xff && \ + (((const uint8_t *) (a))[1] & 0xf) == 0x2) + +# define IN6_ARE_ADDR_EQUAL(a,b) \ + ((((const uint32_t *) (a))[0] == ((const uint32_t *) (b))[0]) && \ + (((const uint32_t *) (a))[1] == ((const uint32_t *) (b))[1]) && \ + (((const uint32_t *) (a))[2] == ((const uint32_t *) (b))[2]) && \ + (((const uint32_t *) (a))[3] == ((const uint32_t *) (b))[3])) + #define INET_ADDRSTRLEN 16 #define INET6_ADDRSTRLEN 46 diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index 42ac118..f593a6e 100644 --- a/ofproto/ofproto-dpif-xlate.c +++ b/ofproto/ofproto-dpif-xlate.c @@ -91,6 +91,16 @@ VLOG_DEFINE_THIS_MODULE(ofproto_dpif_xlate); * recursive or not. */ #define MAX_RESUBMITS (MAX_DEPTH * MAX_DEPTH) +/* The structure holds an array of IP addresses assigned to a bridge and the + * number of elements in the array. These data are mutable and are evaluated + * when ARP or Neighbor Advertisement packets received on a native tunnel + * port are xlated. So 'ref_cnt' and RCU are used for synchronization. */ +struct xbridge_addr { + struct in6_addr *addr; /* Array of IP addresses of xbridge. */ + int n_addr; /* Number of IP addresses. */ + struct ovs_refcount ref_cnt; +}; + struct xbridge { struct hmap_node hmap_node; /* Node in global 'xbridges' map. */ struct ofproto_dpif *ofproto; /* Key in global 'xbridges' map. */ @@ -114,6 +124,8 @@ struct xbridge { /* Datapath feature support. */ struct dpif_backer_support support; + + struct xbridge_addr *addr; }; struct xbundle { @@ -582,7 +594,8 @@ static void xlate_xbridge_set(struct xbridge *, struct dpif *, const struct dpif_ipfix *, const struct netflow *, bool forward_bpdu, bool has_in_band, - const struct dpif_backer_support *); + const struct dpif_backer_support *, + const struct xbridge_addr *); static void xlate_xbundle_set(struct xbundle *xbundle, enum port_vlan_mode vlan_mode, uint16_t qinq_ethtype, int vlan, @@ -836,6 +849,56 @@ xlate_xport_init(struct xlate_cfg *xcfg, struct xport *xport) uuid_hash(&xport->uuid)); } +static struct xbridge_addr * +xbridge_addr_create(struct xbridge *xbridge) +{ + struct xbridge_addr *xbridge_addr = xbridge->addr; + struct in6_addr *addr = NULL, *mask = NULL; + struct netdev *dev; + int err, n_addr = 0; + + err = netdev_open(xbridge->name, NULL, &dev); + if (!err) { + err = netdev_get_addr_list(dev, &addr, &mask, &n_addr); + if (!err) { + if (!xbridge->addr || + n_addr != xbridge->addr->n_addr || + (xbridge->addr->addr && memcmp(addr, xbridge->addr->addr, + sizeof(*addr) * n_addr))) { + xbridge_addr = xzalloc(sizeof *xbridge_addr); + xbridge_addr->addr = addr; + xbridge_addr->n_addr = n_addr; + ovs_refcount_init(&xbridge_addr->ref_cnt); + } else { + free(addr); + } + free(mask); + } + netdev_close(dev); + } + + return xbridge_addr; +} + +static struct xbridge_addr * +xbridge_addr_ref(const struct xbridge_addr *addr_) +{ + struct xbridge_addr *addr = CONST_CAST(struct xbridge_addr *, addr_); + if (addr) { + ovs_refcount_ref(&addr->ref_cnt); + } + return addr; +} + +static void +xbridge_addr_unref(struct xbridge_addr *addr) +{ + if (addr && ovs_refcount_unref_relaxed(&addr->ref_cnt) == 1) { + free(addr->addr); + free(addr); + } +} + static void xlate_xbridge_set(struct xbridge *xbridge, struct dpif *dpif, @@ -846,7 +909,8 @@ xlate_xbridge_set(struct xbridge *xbridge, const struct dpif_ipfix *ipfix, const struct netflow *netflow, bool forward_bpdu, bool has_in_band, - const struct dpif_backer_support *support) + const struct dpif_backer_support *support, + const struct xbridge_addr *addr) { if (xbridge->ml != ml) { mac_learning_unref(xbridge->ml); @@ -888,6 +952,11 @@ xlate_xbridge_set(struct xbridge *xbridge, xbridge->netflow = netflow_ref(netflow); } + if (xbridge->addr != addr) { + xbridge_addr_unref(xbridge->addr); + xbridge->addr = xbridge_addr_ref(addr); + } + xbridge->dpif = dpif; xbridge->forward_bpdu = forward_bpdu; xbridge->has_in_band = has_in_band; @@ -981,7 +1050,7 @@ xlate_xbridge_copy(struct xbridge *xbridge) xbridge->rstp, xbridge->ms, xbridge->mbridge, xbridge->sflow, xbridge->ipfix, xbridge->netflow, xbridge->forward_bpdu, xbridge->has_in_band, - &xbridge->support); + &xbridge->support, xbridge->addr); LIST_FOR_EACH (xbundle, list_node, &xbridge->xbundles) { xlate_xbundle_copy(new_xbridge, xbundle); } @@ -1139,6 +1208,7 @@ xlate_ofproto_set(struct ofproto_dpif *ofproto, const char *name, const struct dpif_backer_support *support) { struct xbridge *xbridge; + struct xbridge_addr *xbridge_addr, *old_addr; ovs_assert(new_xcfg); @@ -1153,8 +1223,16 @@ xlate_ofproto_set(struct ofproto_dpif *ofproto, const char *name, free(xbridge->name); xbridge->name = xstrdup(name); + xbridge_addr = xbridge_addr_create(xbridge); + old_addr = xbridge->addr; + xlate_xbridge_set(xbridge, dpif, ml, stp, rstp, ms, mbridge, sflow, ipfix, - netflow, forward_bpdu, has_in_band, support); + netflow, forward_bpdu, has_in_band, support, + xbridge_addr); + + if (xbridge_addr != old_addr) { + xbridge_addr_unref(xbridge_addr); + } } static void @@ -1184,6 +1262,7 @@ xlate_xbridge_remove(struct xlate_cfg *xcfg, struct xbridge *xbridge) netflow_unref(xbridge->netflow); stp_unref(xbridge->stp); rstp_unref(xbridge->rstp); + xbridge_addr_unref(xbridge->addr); hmap_destroy(&xbridge->xports); free(xbridge->name); free(xbridge); @@ -3703,6 +3782,54 @@ check_output_prerequisites(struct xlate_ctx *ctx, return true; } +/* Function verifies if destination address of received Neighbor Advertisement + * message stored in 'flow' is correct. It should be either FF02::1:FFXX:XXXX + * where XX:XXXX stands for the last 24 bits of 'ipv6_addr' or it should match + * 'ipv6_addr'. */ +static bool +is_nd_dst_correct(const struct flow *flow, const struct in6_addr *ipv6_addr) +{ + const uint8_t *flow_ipv6_addr = (uint8_t *) &flow->ipv6_dst; + const uint8_t *addr = (uint8_t *) ipv6_addr; + + return (IN6_IS_ADDR_MC_LINKLOCAL(flow_ipv6_addr) && + flow_ipv6_addr[11] == 0x01 && + flow_ipv6_addr[12] == 0xff && + flow_ipv6_addr[13] == addr[13] && + flow_ipv6_addr[14] == addr[14] && + flow_ipv6_addr[15] == addr[15]) || + IN6_ARE_ADDR_EQUAL(&flow->ipv6_dst, ipv6_addr); +} + +/* Function verifies if the ARP reply or Neighbor Advertisement represented by + * 'flow' addresses the 'xbridge' of 'ctx'. Returns true if the ARP TA or + * neighbor discovery destination is in the list of configured IP addresses of + * the bridge. Otherwise, it returns false. */ +static bool +is_neighbor_reply_correct(const struct xlate_ctx *ctx, const struct flow *flow) +{ + bool ret = false; + int i; + struct xbridge_addr *xbridge_addr = xbridge_addr_ref(ctx->xbridge->addr); + + /* Verify if 'nw_dst' of ARP or 'ipv6_dst' of ICMPV6 is in the list. */ + for (i = 0; xbridge_addr && i < xbridge_addr->n_addr; i++) { + struct in6_addr *ip_addr = &xbridge_addr->addr[i]; + if ((IN6_IS_ADDR_V4MAPPED(ip_addr) && + flow->dl_type == htons(ETH_TYPE_ARP) && + in6_addr_get_mapped_ipv4(ip_addr) == flow->nw_dst) || + (!IN6_IS_ADDR_V4MAPPED(ip_addr) && + is_nd_dst_correct(flow, ip_addr))) { + /* Found a match. */ + ret = true; + break; + } + } + + xbridge_addr_unref(xbridge_addr); + return ret; +} + static bool terminate_native_tunnel(struct xlate_ctx *ctx, ofp_port_t ofp_port, struct flow *flow, struct flow_wildcards *wc, @@ -3715,6 +3842,15 @@ terminate_native_tunnel(struct xlate_ctx *ctx, ofp_port_t ofp_port, if (ofp_port == OFPP_LOCAL && ovs_native_tunneling_is_on(ctx->xbridge->ofproto)) { *tnl_port = tnl_port_map_lookup(flow, wc); + + /* If no tunnel port was found and it's about an ARP or ICMPv6 packet, + * do tunnel neighbor snooping. */ + if (*tnl_port == ODPP_NONE && + (flow->dl_type == htons(ETH_TYPE_ARP) || + flow->nw_proto == IPPROTO_ICMPV6) && + is_neighbor_reply_correct(ctx, flow)) { + tnl_neigh_snoop(flow, wc, ctx->xbridge->name); + } } return *tnl_port != ODPP_NONE; @@ -6135,9 +6271,6 @@ do_xlate_actions(const struct ofpact *ofpacts, size_t ofpacts_len, struct flow *flow = &ctx->xin->flow; const struct ofpact *a; - if (ovs_native_tunneling_is_on(ctx->xbridge->ofproto)) { - tnl_neigh_snoop(flow, wc, ctx->xbridge->name); - } /* dl_type already in the mask, not set below. */ if (!ofpacts_len) { diff --git a/tests/tunnel-push-pop-ipv6.at b/tests/tunnel-push-pop-ipv6.at index 29bc1f3..78fbf41 100644 --- a/tests/tunnel-push-pop-ipv6.at +++ b/tests/tunnel-push-pop-ipv6.at @@ -55,9 +55,73 @@ AT_CHECK([cat p0.pcap.txt | grep 93aa55aa55000086dd6000000000203aff2001cafe | un ]) dnl Check ARP Snoop -AT_CHECK([ovs-appctl netdev-dummy/receive p0 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:cafe::92,dst=2001:cafe::94,label=0,proto=58,tclass=0,hlimit=255,frag=no),icmpv6(type=136,code=0),nd(target=2001:cafe::92,sll=00:00:00:00:00:00,tll=f8:bc:12:44:34:b6)']) +AT_CHECK([ovs-appctl netdev-dummy/receive p0 'in_port(1),eth(src=f8:bc:12:44:34:c8,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:cafe::92,dst=2001:cafe::88,label=0,proto=58,tclass=0,hlimit=255,frag=no),icmpv6(type=136,code=0),nd(target=2001:cafe::92,sll=00:00:00:00:00:00,tll=f8:bc:12:44:34:c8)']) -AT_CHECK([ovs-appctl netdev-dummy/receive p0 'in_port(1),eth(src=f8:bc:12:44:34:b7,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:cafe::93,dst=2001:cafe::94,label=0,proto=58,tclass=0,hlimit=255,frag=no),icmpv6(type=136,code=0),nd(target=2001:cafe::93,sll=00:00:00:00:00:00,tll=f8:bc:12:44:34:b7)']) +ovs-appctl time/warp 1000 +ovs-appctl time/warp 1000 + +AT_CHECK([ovs-appctl tnl/arp/show | tail -n+3 | sort], [0], [dnl +2001:cafe::92 f8:bc:12:44:34:c8 br0 +]) + +dnl Receiving Neighbor Advertisement with incorrect 'nw_dst' should not alter tunnel neighbor cache +AT_CHECK([ovs-appctl netdev-dummy/receive p0 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:cafe::92,dst=2001:cafe::99,label=0,proto=58,tclass=0,hlimit=255,frag=no),icmpv6(type=136,code=0),nd(target=2001:cafe::92,sll=00:00:00:00:00:00,tll=f8:bc:12:44:34:b6)']) + +ovs-appctl time/warp 1000 +ovs-appctl time/warp 1000 + +AT_CHECK([ovs-appctl tnl/arp/show | tail -n+3 | sort], [0], [dnl +2001:cafe::92 f8:bc:12:44:34:c8 br0 +]) + +dnl Receiving Neighbot Advertisement with incorrect VLAN id should not alter tunnel neighbor cache +AT_CHECK([ovs-vsctl set port br0 tag=10]) +AT_CHECK([ovs-appctl netdev-dummy/receive p0 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x8100),vlan(vid=99,pcp=7),encap(eth_type(0x86dd),ipv6(src=2001:cafe::92,dst=2001:cafe::88,label=0,proto=58,tclass=0,hlimit=255,frag=no),icmpv6(type=136,code=0),nd(target=2001:cafe::92,sll=00:00:00:00:00:00,tll=f8:bc:12:44:34:b6))']) + +ovs-appctl time/warp 1000 +ovs-appctl time/warp 1000 + +AT_CHECK([ovs-appctl tnl/arp/show | tail -n+3 | sort], [0], [dnl +2001:cafe::92 f8:bc:12:44:34:c8 br0 +]) + +dnl Receiving Neighbor Advertisement with correct VLAN id should alter tunnel neighbor cache +AT_CHECK([ovs-vsctl set port br0 tag=10]) +AT_CHECK([ovs-appctl netdev-dummy/receive p0 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x8100),vlan(vid=10,pcp=7),encap(eth_type(0x86dd),ipv6(src=2001:cafe::92,dst=2001:cafe::88,label=0,proto=58,tclass=0,hlimit=255,frag=no),icmpv6(type=136,code=0),nd(target=2001:cafe::92,sll=00:00:00:00:00:00,tll=f8:bc:12:44:34:b6))']) + +ovs-appctl time/warp 1000 +ovs-appctl time/warp 1000 + +AT_CHECK([ovs-appctl tnl/arp/show | tail -n+3 | sort], [0], [dnl +2001:cafe::92 f8:bc:12:44:34:b6 br0 +]) + +dnl Receiving Neighbor Advertisement in overlay bridge should not alter tunnel neighbor cache +AT_CHECK([ovs-vsctl add-port int-br p1 -- set interface p1 type=dummy ofport_request=200 other-config:hwaddr=aa:55:aa:55:00:99]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(200),eth(src=f8:bc:12:44:34:c8,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:cafe::92,dst=2001:cafe::99,label=0,proto=58,tclass=0,hlimit=255,frag=no),icmpv6(type=136,code=0),nd(target=2001:cafe::92,sll=00:00:00:00:00:00,tll=f8:bc:12:44:34:c8)']) + +ovs-appctl time/warp 1000 +ovs-appctl time/warp 1000 + +AT_CHECK([ovs-appctl tnl/neigh/show | grep br | sort], [0], [dnl +2001:cafe::92 f8:bc:12:44:34:b6 br0 +]) + +dnl Receive Neighbor Advertisement without VLAN header +AT_CHECK([ovs-vsctl set port br0 tag=0]) +AT_CHECK([ovs-appctl tnl/neigh/flush], [0], [OK +]) + +ovs-appctl time/warp 1000 +ovs-appctl time/warp 1000 + + +AT_CHECK([ovs-appctl netdev-dummy/receive p0 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:cafe::92,dst=2001:cafe::88,label=0,proto=58,tclass=0,hlimit=255,frag=no),icmpv6(type=136,code=0),nd(target=2001:cafe::92,sll=00:00:00:00:00:00,tll=f8:bc:12:44:34:b6)']) + +AT_CHECK([ovs-appctl netdev-dummy/receive p0 'in_port(1),eth(src=f8:bc:12:44:34:b7,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:cafe::93,dst=ff02::1:ff00:0088,label=0,proto=58,tclass=0,hlimit=255,frag=no),icmpv6(type=136,code=0),nd(target=2001:cafe::93,sll=00:00:00:00:00:00,tll=f8:bc:12:44:34:b7)']) + +ovs-appctl time/warp 1000 +ovs-appctl time/warp 1000 AT_CHECK([ovs-appctl tnl/arp/show | tail -n+3 | sort], [0], [dnl 2001:cafe::92 f8:bc:12:44:34:b6 br0 diff --git a/tests/tunnel-push-pop.at b/tests/tunnel-push-pop.at index d43f622..10f98c6 100644 --- a/tests/tunnel-push-pop.at +++ b/tests/tunnel-push-pop.at @@ -70,9 +70,71 @@ ffffffffffffaa55aa55000008060001080006040001aa55aa550000010102580000000000000101 ]) dnl Check ARP Snoop +AT_CHECK([ovs-appctl netdev-dummy/receive p0 'recirc_id(0),in_port(1),eth(src=f8:bc:12:44:34:c8,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=1.1.2.92,tip=1.1.2.88,op=2,sha=f8:bc:12:44:34:c8,tha=00:00:00:00:00:00)']) + +ovs-appctl time/warp 1000 +ovs-appctl time/warp 1000 + +AT_CHECK([ovs-appctl tnl/neigh/show | grep br0 | sort], [0], [dnl +1.1.2.92 f8:bc:12:44:34:c8 br0 +]) + +dnl Receiving ARP reply with incorrect 'tip' should not alter tunnel neighbor cache +AT_CHECK([ovs-appctl netdev-dummy/receive p0 'recirc_id(0),in_port(1),eth(src=f8:bc:12:44:34:b8,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=1.1.2.92,tip=1.1.2.90,op=2,sha=f8:bc:12:44:34:b8,tha=00:00:00:00:00:00)']) + +ovs-appctl time/warp 1000 +ovs-appctl time/warp 1000 + +AT_CHECK([ovs-appctl tnl/neigh/show | grep br0 | sort], [0], [dnl +1.1.2.92 f8:bc:12:44:34:c8 br0 +]) + +dnl Receiving ARP reply with incorrect VLAN id should not alter tunnel neighbor cache +AT_CHECK([ovs-vsctl set port br0 tag=10]) +AT_CHECK([ovs-appctl netdev-dummy/receive p0 'recirc_id(0),in_port(1),eth(src=f8:bc:12:44:34:b6,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8100),vlan(vid=99,pcp=7),encap(eth_type(0x0806),arp(sip=1.1.2.92,tip=1.1.2.88,op=2,sha=f8:bc:12:44:34:b6,tha=00:00:00:00:00:00))']) + +ovs-appctl time/warp 1000 +ovs-appctl time/warp 1000 + +AT_CHECK([ovs-appctl tnl/neigh/show | grep br0 | sort], [0], [dnl +1.1.2.92 f8:bc:12:44:34:c8 br0 +]) + +dnl Receiving ARP reply with correct VLAN id should alter tunnel neighbor cache +AT_CHECK([ovs-appctl netdev-dummy/receive p0 'recirc_id(0),in_port(1),eth(src=f8:bc:12:44:34:b6,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8100),vlan(vid=10,pcp=7),encap(eth_type(0x0806),arp(sip=1.1.2.92,tip=1.1.2.88,op=2,sha=f8:bc:12:44:34:b6,tha=00:00:00:00:00:00))']) + +ovs-appctl time/warp 1000 +ovs-appctl time/warp 1000 + +AT_CHECK([ovs-appctl tnl/neigh/show | grep br0 | sort], [0], [dnl +1.1.2.92 f8:bc:12:44:34:b6 br0 +]) + +dnl Receiving ARP reply in overlay bridge should not alter tunnel neighbor cache +AT_CHECK([ovs-vsctl add-port int-br p1 -- set interface p1 type=dummy ofport_request=200 other-config:hwaddr=aa:55:aa:55:00:99]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 'recirc_id(0),in_port(200),eth(src=f8:bc:12:44:34:c8,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=1.1.2.92,tip=1.1.2.88,op=2,sha=f8:bc:12:44:34:c8,tha=00:00:00:00:00:00)']) + +ovs-appctl time/warp 1000 +ovs-appctl time/warp 1000 + +AT_CHECK([ovs-appctl tnl/neigh/show | grep br | sort], [0], [dnl +1.1.2.92 f8:bc:12:44:34:b6 br0 +]) + +dnl Receive ARP reply without VLAN header +AT_CHECK([ovs-vsctl set port br0 tag=0]) +AT_CHECK([ovs-appctl tnl/neigh/flush], [0], [OK +]) + +ovs-appctl time/warp 1000 +ovs-appctl time/warp 1000 + AT_CHECK([ovs-appctl netdev-dummy/receive p0 'recirc_id(0),in_port(1),eth(src=f8:bc:12:44:34:b6,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=1.1.2.92,tip=1.1.2.88,op=2,sha=f8:bc:12:44:34:b6,tha=00:00:00:00:00:00)']) AT_CHECK([ovs-appctl netdev-dummy/receive p0 'recirc_id(0),in_port(1),eth(src=f8:bc:12:44:34:b7,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=1.1.2.93,tip=1.1.2.88,op=2,sha=f8:bc:12:44:34:b7,tha=00:00:00:00:00:00)']) +ovs-appctl time/warp 1000 +ovs-appctl time/warp 1000 + AT_CHECK([ovs-appctl tnl/neigh/show | tail -n+3 | sort], [0], [dnl 1.1.2.92 f8:bc:12:44:34:b6 br0 1.1.2.93 f8:bc:12:44:34:b7 br0 @@ -190,9 +252,12 @@ AT_CHECK([ovs-ofctl dump-ports int-br | grep 'port 7'], [0], [dnl dnl Check GREL3 only accepts non-fragmented packets? AT_CHECK([ovs-appctl netdev-dummy/receive p0 'aa55aa550000001b213cab6408004500007e79464000402fba550101025c0101025820000800000001c8fe71d883724fbeb6f4e1494a080045000054ba200000400184861e0000011e00000200004227e75400030af3195500000000f265010000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637']) +ovs-appctl time/warp 1000 +ovs-appctl time/warp 1000 + AT_CHECK([ovs-ofctl dump-ports int-br | grep 'port [[37]]' | sort], [0], [dnl port 3: rx pkts=3, bytes=294, drop=?, errs=?, frame=?, over=?, crc=? - port 7: rx pkts=3, bytes=252, drop=?, errs=?, frame=?, over=?, crc=? + port 7: rx pkts=4, bytes=350, drop=?, errs=?, frame=?, over=?, crc=? ]) dnl Check decapsulation of Geneve packet with options