From patchwork Fri Mar 24 10:05:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nobuhiro MIKI X-Patchwork-Id: 1760700 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.133; helo=smtp2.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=P+VGf8EK; dkim-atps=neutral Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4PjdCC4GF3z1yXv for ; Fri, 24 Mar 2023 21:06:15 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 779BA41E16; Fri, 24 Mar 2023 10:06:12 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 779BA41E16 Authentication-Results: smtp2.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key, unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=P+VGf8EK X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id i-P0YCLguQXh; Fri, 24 Mar 2023 10:06:05 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp2.osuosl.org (Postfix) with ESMTPS id E3DC941DEB; Fri, 24 Mar 2023 10:06:03 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org E3DC941DEB Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 8B385C0035; Fri, 24 Mar 2023 10:06:01 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 6079EC0090 for ; Fri, 24 Mar 2023 10:05:58 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 277444058F for ; Fri, 24 Mar 2023 10:05:58 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 277444058F X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 0Dk4FDI9PmIf for ; Fri, 24 Mar 2023 10:05:56 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 684B940589 Received: from corp-ob10.yahoo-corp.jp (corp-ob10.yahoo-corp.jp [182.22.125.210]) by smtp2.osuosl.org (Postfix) with ESMTPS id 684B940589 for ; Fri, 24 Mar 2023 10:05:55 +0000 (UTC) Received: from JPN01-TYC-obe.outbound.protection.outlook.com (mail-tycjpn01lp2172.outbound.protection.outlook.com [104.47.23.172]) by corp-ob10.yahoo-corp.jp (Postfix) with ESMTPS id 28E6719FB180 for ; Fri, 24 Mar 2023 19:05:53 +0900 (JST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EgH2gofFZd9FY0DBy/Q5kyrLPcfqbRgmjQ7fNgRzRDsGGi6s84H6NhfZm0wy+bmdtv43eSfRxfuJEzLFPhOaShjbStB1Z4Q0V1m5Njwr5JEA8bu6ZUpxwOd2d5NFlK4dMoL1CdCAqRTBjel0imaBtXMGPkBgUjeCFbtUGJF5eXiGKxIA8nuLZ0ZO2Vfww/xK1B9N/KD216YQjwv1Rzl88rBQ/cknU9Mc84egIFtp6aMR4t0pE5+jljlDbI7JWSzUPyVDZhm7V9oWquQPKLe92BQo1xlCaZRMS7hGvL+ZdHmMzToU0q83DWUm15fxMNPw0yw7IJE+qLBv9av7IyPI5g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=aHs2bTS3F2joZY3TtdXRaTYs46qB0SIJID4fsiZCAZM=; b=BlBK3zJzlZ3V6nrodrOR8dKT1sCxmBvzILCewVuKZYhvuCaPEibfKl4dGstG8FSestt+8PyXP7n28K8l0c0FpZHr/YdCHIV7bcq2Dt19dK/p9A8bZM3Gra7tyNNXgC2sTQHGZOzJk0uhm4qNbfEMhyp6LCZsA/ookh73uAgWf5+4oFrqfURCF986xaOXQvJ1854RToapvwvnfbbKId7cOtcZkEz22iFxNcFb01NVHOsYIFjFjUarCUiqx6cNbauJpTUHW7ShMGmT4eoKmqIG9Tw3JQxvRr7yeOQKo87TZMyK5CkdSr8eJRt+58famIga+C6dFMYm6w8GatVT7aLwOQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=yahoo-corp.jp; dmarc=pass action=none header.from=yahoo-corp.jp; dkim=pass header.d=yahoo-corp.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo-corp.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aHs2bTS3F2joZY3TtdXRaTYs46qB0SIJID4fsiZCAZM=; b=P+VGf8EKh4o+92D7f2cClIhCWpIMFSKPtMjFMmwANoEtGJk0XtNcpvWSfA2UbWXYas0eWoAdkv8MOJdaXgckb8HVk4Puh7/mghzpD9onb22bkJS/TmsnFZUXi+AJBvaZAkQE2/60/EXL3IuoSQOxNX0L6StHAPtCRgrJC3jAtrs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=yahoo-corp.jp; Received: from TY2PR01MB4107.jpnprd01.prod.outlook.com (2603:1096:404:d8::23) by TYCPR01MB8376.jpnprd01.prod.outlook.com (2603:1096:400:150::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.38; Fri, 24 Mar 2023 10:05:52 +0000 Received: from TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::61fe:e4c3:a819:6ce6]) by TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::61fe:e4c3:a819:6ce6%7]) with mapi id 15.20.6178.038; Fri, 24 Mar 2023 10:05:52 +0000 From: Nobuhiro MIKI To: dev@openvswitch.org Date: Fri, 24 Mar 2023 19:05:34 +0900 Message-Id: <20230324100538.70290-2-nmiki@yahoo-corp.jp> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20230324100538.70290-1-nmiki@yahoo-corp.jp> References: <20230324100538.70290-1-nmiki@yahoo-corp.jp> X-ClientProxiedBy: TYAPR01CA0125.jpnprd01.prod.outlook.com (2603:1096:404:2d::17) To TY2PR01MB4107.jpnprd01.prod.outlook.com (2603:1096:404:d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PR01MB4107:EE_|TYCPR01MB8376:EE_ X-MS-Office365-Filtering-Correlation-Id: fbca2490-3b01-4c69-2574-08db2c4f5977 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vQTc8vSwZCCb5D/MWeTWIcjtQSwzODg51iuZlFjr+1nhJip4fDViktufmlrPWRK+BZAYqN20h4sHWf1LtFBKZD65XaXKKwS1IICn/f6h/pKZKoaMP+/WqgEDyF5zzUZ+4o30ECxLADf45SZaRP0p2B7y2NRXxGO7HUboN1dhuaTIDVwxI8IGWSIrjmkTx7IwFl1eRa94J9A+d84mQV4kRThdKdViqSR0hXppwmmzyuSiyRHRhButv5DV5YjqXl94DbpF/4swZhYCFbeaZ8EpTB8ugjTegUE1zKB812BvUqA66l4jXqN1NKv8iV2c2iVmHS7kSnx3eDzTOW2hKEQzpmm83bHac9+bjH4gOukuDVBZ1GeFAFiycLHtWup9zLmc+2h3uMmKkLxjMyN/W34MXzuaLmapUqZ4b/AiXjBJgXTHBM5Iof9RT8bFHAnTdmBG6Wg3p6bXhT2ObmY8ArnLMHTMfR0586vAyM5zj1lE6EltPxsUEaP3v2+yVmZe0f/U0VLmRF58r1gUsRr7vNliLykyg/5f3sNZkjbVB4SqKMhv/A8Ikj7QOV76rRXjgh+o0m6Yzg04O/Vblm8tzdCTJLgMoX5sU/kw4y29V2irXtI5n2PqR1B1J3y0MVSpoPPS7MnMyoOjeoou0bZGyD+L4Nf0FD6Wj6Cp29viqNGYS3rN7mhYpGZt7U0xqlRQbKcuiMHBxdsaBUnPWz2GVh1P9Q== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TY2PR01MB4107.jpnprd01.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(4636009)(39860400002)(346002)(136003)(366004)(396003)(376002)(451199018)(36756003)(66476007)(8676002)(4326008)(66556008)(66946007)(6916009)(5660300002)(82960400001)(316002)(6512007)(6666004)(26005)(1076003)(6506007)(8936002)(41300700001)(186003)(478600001)(2616005)(6486002)(107886003)(52116002)(86362001)(38100700002)(38350700002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: s1rm1z5IWUhLrUc4UzXGbnIP5I+lCyRQsHeBQkwKe0yX11xXnF9Ss+87SREmTQ0xuD/ajz0HGoztyQzDjfi37Lj5uPYHKY4pkfn5CAfU++ZXQQe09G9FVfJ8CFZfH8sTceNmHdoLbbzt8HD1twnr71tPbwiLf2ol3KO3ZCvYmZ0c4VvCyDVyvRSUZjo5GrsWoS4V/LA3auWsVLpqO/JvyfnCNB5ZZJWfvokSB2za9GivKkuUDVs5ihBE0jJseFnVAgLajOuyfZO9f+cTlbAak1kWowgTCkimimzo3f/vIGb47AYqumCl/Hs+lC+lKhzngcec/7zkmkynd/AIaH/BYzsQ4IrPZjl38OrMGJCf09qoY38J6o/aIvr0CN2i1ZwctO23/4nPzS2w7ObZvFPIFDXwM95ZDvRzScqPFX+yLEdQ10vcXHIrCNx93oZYeVyQpfETd61ieHkjG4i/EIUgHgtLi8elAM6Xowtmb9zqXaNatwHjd2pz8NcbO8k7kVhsIyoVzPVc1KNa/rICfuAjI72399fyvwsD7N1t4QMyXWCcY1xsnfywsLWAWhH1+AwQnVILQ0vs2tFiQjkG34mNv6Usa6/Kp3/IfQRCAOoUBx3XJ+mMD9OkFfPLSqqbwEuFxLee99Z1cTB8BRUTjtKD9RqDcZq8IoqApRIm0arO9Snbi95f5cKw49V2z1QgmA5AIlIB9b0L3Fkbp/mfsM3nheR9z/4+R1oP1CZDCNwmTmDAwIM08gqRZIOQ0No2t0JcIrVj6MWMngeOY3/o8OpLH8GmyC64qdFxL4TYXNwibHmu+ocwsdUEtiTlvtUaweo+zd7Gg9f45OaPTbHHu6Ga8FwOQgnEp80jaCoqLRQvYvw3NducTRmuYTz70Uxq4CPz4m/mtIKPIIUryI4zVyH38G/37sBG17KgukCqIYHg0lgNq/u0l8EVU4ExpXNOYrEGg0nhqVyMz4HVbVIxnr622w4MKx8SKDlt07B1FC3Eb5NH6/1y9mTS/NU6xZwE8lS8DQJ+iSQ888TQHwhPcxgPkOaZ0pqL7Ogwb35291z3biaimOGJ8dAdtOdlI2aqBQhW3QNudGMWk57RX4moZcV+2OhIFkTsgBPBJnJGL+3H56GMNHYd70AKBkvdGDydYXdB1NRkCN2Hy4Yv7W5ZzPweFKai/Uq73m7h+6n2eTFMckBFz4TRtuToT0rD9Gfw1gfVNF10AkBQEbpYvv2LRLTzvIm4jvTseOw2Mtq8A0dEwX16pW1WVEgLxMCzgOt0Xlc+El2iaZqoTg9ehm+rrV4SryGtDwWseMZ1xtWAQDxhD6e+E2510N6wF8sUOmEE/xwFuZADQe94RWmWDWTBafOxx10TXEG91c+rRZ4lkfB6QGtZ1TSMhEsN21AwVMJCvYTS1CIrGfIy09+MrQeTGuhlHl0U7kXVWA3btLOi4QnikEQKe0Z5ouu2z+NNlNuGJ6WoVB3k4PiKNzF6sT3nBKRk4gymRiKc0QKpZeAplj4sMjTEXK9V7S/vh6/lTYOSPlvIUDrQ5cwrarTYU+0Qq8y+xB67hTTtwwlybKCzD36XiKE5mVtebIkgPCo1rod9pNr1 X-OriginatorOrg: yahoo-corp.jp X-MS-Exchange-CrossTenant-Network-Message-Id: fbca2490-3b01-4c69-2574-08db2c4f5977 X-MS-Exchange-CrossTenant-AuthSource: TY2PR01MB4107.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2023 10:05:52.1357 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a208d369-cd4e-4f87-b119-98eaf31df2c3 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: WtYh2CxRJpDvstuwHw7qB+ejcdWskGwKtoSu5wPPnquIBt1j7fCAmb9KjXQK90OwyNfnSDoHhXlLzbTBu33y8Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB8376 Subject: [ovs-dev] [PATCH v10 1/5] tests: Define new ADD_VETH_NS macro. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" The new ADD_VETH_NS macro creates two netns and connects them with a veth pair. We can use it for testing in a generic purpose. e.g. ADD_VETH_NS([ns1], [p1], [1.1.1.1/24], [ns2], [p2], [1.1.1.2/24]) Signed-off-by: Nobuhiro MIKI --- tests/system-common-macros.at | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/system-common-macros.at b/tests/system-common-macros.at index 8b9f5c75254f..0077a8609c02 100644 --- a/tests/system-common-macros.at +++ b/tests/system-common-macros.at @@ -126,6 +126,22 @@ m4_define([ADD_VETH_BOND], ] ) +# ADD_VETH_NS([ns1], [port1], [ip_addr1], [ns2], [port2], [ip_addr2]) +# +# Add a pair of veth ports in 'ns1' and 'ns2'. The port names are 'port1' +# and 'port2' respectively, and the IP addresses 'ip_addr1' and 'ip_addr2' +# are assigned to each port. +m4_define([ADD_VETH_NS], + [ AT_CHECK([ip link add $2 type veth peer name $5]), + AT_CHECK([ip link set $2 netns $1]) + AT_CHECK([ip link set $5 netns $4]) + NS_CHECK_EXEC([$1], [ip link set $2 up]) + NS_CHECK_EXEC([$4], [ip link set $5 up]) + NS_CHECK_EXEC([$1], [ip addr add $3 dev $2]) + NS_CHECK_EXEC([$4], [ip addr add $6 dev $5]) + ] +) + # ADD_VLAN([port], [namespace], [vlan-id], [ip-addr]) # # Add a VLAN device named 'port' within 'namespace'. It will be configured From patchwork Fri Mar 24 10:05:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nobuhiro MIKI X-Patchwork-Id: 1760699 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::137; helo=smtp4.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=SiIrl1O4; dkim-atps=neutral Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4PjdC353g3z1yYB for ; Fri, 24 Mar 2023 21:06:07 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 6686341F3E; Fri, 24 Mar 2023 10:06:03 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 6686341F3E Authentication-Results: smtp4.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key, unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=SiIrl1O4 X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id N08Pejfqo77J; Fri, 24 Mar 2023 10:06:01 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp4.osuosl.org (Postfix) with ESMTPS id 7EFA740627; Fri, 24 Mar 2023 10:06:00 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 7EFA740627 Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 22B8EC008E; Fri, 24 Mar 2023 10:05:58 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 369D9C0032 for ; Fri, 24 Mar 2023 10:05:57 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id E9B6A4053D for ; Fri, 24 Mar 2023 10:05:56 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org E9B6A4053D X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id cOMVCzC5TLwV for ; Fri, 24 Mar 2023 10:05:55 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 5DEDA40491 Received: from corp-ob09.yahoo-corp.jp (corp-ob09.yahoo-corp.jp [182.22.125.216]) by smtp4.osuosl.org (Postfix) with ESMTPS id 5DEDA40491 for ; Fri, 24 Mar 2023 10:05:55 +0000 (UTC) Received: from JPN01-TYC-obe.outbound.protection.outlook.com (mail-tycjpn01lp2168.outbound.protection.outlook.com [104.47.23.168]) by corp-ob09.yahoo-corp.jp (Postfix) with ESMTPS id 8FFF819FB183 for ; Fri, 24 Mar 2023 19:05:53 +0900 (JST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CQQRjJaVnAqmn2nsNSpEiAXMVSftMpEtHod61Z9XdMyrCUGHnrbmwyLij/KvG8nC49K9mY8Feg96hszPxLu9VDEg3vQTX4aRfDjSgbHj8JcKVgJZ9XcG3ChGh3Vlwb6jZJfIhN0KaO6V1oACIGxSoT5Sossur5nDcs9HecoA579IsIJFaHfiIiwJ9HFOdNQZWZHYegfXYfQLh1FpzUXnLZkP6JZY5y4aTN2DJufVC/cM6scoNiYInYgW3aojlUSvgiMQHOLi4k5z2bPdDP8af2pa9D2KrXGcgN1nae2a/Va1LVWvkcogjiSt0Z4xMi/aCOgSAOS4CyuQiAR8ThG2PA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=qMkb/M6ftaVdWvxL9mX4+O1/2hiFKVFDPdLrFcEfKxw=; b=Ly6KdK7/oh2zcU4XWjdDfxUNIFv/rZXuUjJ+x7LnBkTRyD++KR5jeSX9vdNBj0JcN0ffNEC7P79gR80Nk+DmtRHENwD2x7V2DBjNZtNCTTciPJpS3F7FLzDtS42B4B1RlINj+A+FY4ApbOwITB9IA2EOShIy3w4nRLBWUiFXAkVfYGiUpXPEFTkTnujF/BT3QhWfTwJJGiWs4/XzB91J8/BGc3Xv1WVld+86VVHeLx/yOC/FsSF1VYXirSV6QDpWFSGl6Y5j92LUXPKsynibKx/6Tmv/FICwdbzW2Jdt+W0vAqix7o+SiC16ax16dgaaPjyeYad1edRetVQrcgJTsQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=yahoo-corp.jp; dmarc=pass action=none header.from=yahoo-corp.jp; dkim=pass header.d=yahoo-corp.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo-corp.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qMkb/M6ftaVdWvxL9mX4+O1/2hiFKVFDPdLrFcEfKxw=; b=SiIrl1O4ZaehLzEpTv6+nsUqhUu9dw7QjxVnWta/nT5sQ2mgn7ux6wdq0xxGfa0nUL4eTNwb0Pd0HdNslDgxil+1mtydCu2HkbgpkwRwo1IL1iIp3WPJ6DMU3S9S/WK8kiObkoXkbj2+wjjM1/gK9tFFWBGLCoaFfUd9Fcirjv0= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=yahoo-corp.jp; Received: from TY2PR01MB4107.jpnprd01.prod.outlook.com (2603:1096:404:d8::23) by TYCPR01MB8376.jpnprd01.prod.outlook.com (2603:1096:400:150::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.38; Fri, 24 Mar 2023 10:05:52 +0000 Received: from TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::61fe:e4c3:a819:6ce6]) by TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::61fe:e4c3:a819:6ce6%7]) with mapi id 15.20.6178.038; Fri, 24 Mar 2023 10:05:52 +0000 From: Nobuhiro MIKI To: dev@openvswitch.org Date: Fri, 24 Mar 2023 19:05:35 +0900 Message-Id: <20230324100538.70290-3-nmiki@yahoo-corp.jp> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20230324100538.70290-1-nmiki@yahoo-corp.jp> References: <20230324100538.70290-1-nmiki@yahoo-corp.jp> X-ClientProxiedBy: TYAPR01CA0125.jpnprd01.prod.outlook.com (2603:1096:404:2d::17) To TY2PR01MB4107.jpnprd01.prod.outlook.com (2603:1096:404:d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PR01MB4107:EE_|TYCPR01MB8376:EE_ X-MS-Office365-Filtering-Correlation-Id: f79526b3-641e-4ad2-bd40-08db2c4f59d1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /6cMny4tOs0Pe8ol95Yz1qjLLz9JrhUivBh6vgB9estJd+i+iAbxuQZ4KFxm+OlmqJeprYDIWXCzOEoGxmxM7wWg113wnfjC6H3EznawS7z6Jud/FesC5W/ebT2gdJpEU+sOCJdzAuFtQ4njf4Zn12KzDLEjZorfHolFCPS6HGlGPIY2x1NktbM2LWcbicHMvJPp5LIpOTyF3XBnYETVq3LDFoYtEHEs7lfUSOyo7sjkRu9QdBFbBZkBs0zGeEUy2JbEWWDvvPumAjewnl8rgzhxIU0nQ5CKmbBy4xUqjlFTkATIwBTbV/cFGlTcfPNrQXxwaDKlDtjiGmGc/RaoBmzrc64dowgaAbz7pLpfJSs65KRKRyMumBwagAK7RdhZNeUSJ/jzHkikApZyiICU2UzAM55BLp3dmf8N/p2F8ZfssbXsN4gMBH7sZV6UFn0Mmi8gqvXSfYX1pKVbKBgMkBj7aDJe5fr33HobYEns3H9CupLkrURn/Mlr4WM0kQfBQ0iGdL4kVYaT2i9seoNWZmuc55vkvGOPOehsDt31H2lxPmPDiZsehrZeUPuDpRkbLQH6k8xhJRmXrLMXAMRhwv8n40cnCPQ5RlBLNY/QhqwrsySTvypiCWt/g+jnifcgsxBXKX7ArJt0+yoPttwr9O8xCuGFk59SlerHs2xEUYgRqrJsY8tnjx3O73yPQQqAa7pGqTZb5usGlyDhZZVNTA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TY2PR01MB4107.jpnprd01.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(4636009)(39860400002)(346002)(136003)(366004)(396003)(376002)(451199018)(36756003)(66476007)(8676002)(4326008)(66556008)(66946007)(6916009)(5660300002)(82960400001)(316002)(6512007)(6666004)(26005)(1076003)(6506007)(8936002)(41300700001)(186003)(478600001)(2616005)(6486002)(83380400001)(107886003)(52116002)(86362001)(38100700002)(38350700002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: El2UTd/yoFAw/9XuZ6IW/p/RY4IShFQq1rpuaVZRUou72L2SpYL9A9CJrgsX/NRrhj0gxAxBYNL9Th4h5ta0tAEP9mPZFymWu0eXzrrzRzg8MqZ1IKjuQFuadVmFbVzWrDTeSV3fKZ+xZQ3P6XkqCV5I8ejoQr1Z+XIKl5R6/y697aLvDQoKyvru69WZd1WsKJ/7VIK6l4QGKBjDfKiuJtshxnzjaifvSqJPN3T+7HLfbVrGJ6gX7y/kljttutoaPkpoYcS4dcKL5LE5jvcB4kwGgia52h35eb6/hGoJsBcCZol8SDeYYIf4toytWwZkbZt0UJ3mTbMq4cd59v5TkekJfXuNyh3PdhOpECrIqyqgVUEoEUkls9Rd1fYPT12zjZVcbFduCv8qVWdKsk/tAqTvGsOp/JKpmOUadTLXo5MT0CTLe3vHRW/KeNVbCKM1qNwh0sz96eKNUFLGDSZDkY1POFZ/Btql7Ka8ehaYKCe+jNgi9UfVtEuno9vn4rEoTz57ImpJN7ZkhHKOox2dNE76fyrbynQwm7CtlHoIEFHdT7hcRgpP+xKqEmJHwTLKQ526jxNtDZDrHVAGOZ31JsDjHzv/tytK4Qk8gz8ZnQV9EuT/TJ6rIVn9yVCE9Ia4TOUDuGAWxzYhP4cwc8Jsnc+9htfBHIpEylSRtI9nRxFXiED/kaE5gT1bGlorpsrxn9gYQJStbKJrQGstTKTISJfH/7sjWkynxVjMAJZe/H9myRanv4KC5DrDWFlFpWcN5aLZ4zWWiLUf2R1e5oXopejgnIH6GMr/jWYmq+hvvGgIz2s/8VxvVSoaGrRujcmDV7zRlBxH/64US679baeVVaYAnUrBbXi0iZRj50xpA8SLaJswRtdzPLZE44dRhr/h8dWIF9T57MkX3IzBXY7E9FJ0H1LwRXEi+Sp19yGzZuk7K3ThQNsodfGrieoW04NzR9sHV+jxY1jjE8uu2zZG5UDzimkKpLrexxuxTClN8rh1QvABBh0uBHaCUjGZf1VkM1UdBfrVU0ygh4xMM4Bah+sjK6LmqPNpJyDN+C8VezNOZWO+R4ya4SuZDt2teXROCc8z3oBzMrFpveQvWc9f3UnwDRQPLt21JXOy+jHHqYyQL2f6uqr/rnBeiYvMSSO+jK1CZQ4vzpfpSRG+b8UFKX+PpiSSRGU2Wl/fYD27er/GiuJat5cqO08JM1+jQaJbhRTTfVvu9W0XqFm6jFCuR5cy2VeAMwt4wkZWoUK1XCM60IjHPyeJkNnFhmq3dHoedStcFVCxoK/9FPpagRC/8pqawJmopk4gzA2DeQpdB8NOD4V6+J07AVaSxe6pJjG1OtKSV69M/LQTcXVcfKDEN/dSHX0YMCYuzseogtQr1pXED3nBYOJd2Ms6UOd4iSO8Bg5ydSRxVAz/MPTWpm60xHHF8JqGZY/cHdiJTyilkRpgnaNHVkSWYhSeSy/z/oGwYmDpTynh3Tb1h9P3mM0qYfdApaohTWlRq/dTWeNrPK06YzDCBYb3zTSYc3mCjhgussfpFmLjRO/NTgEOt37HZ5dgUEBVZdGtCt1ufYNxQoqCaWDiuHb6o5QUsGF5A5lN X-OriginatorOrg: yahoo-corp.jp X-MS-Exchange-CrossTenant-Network-Message-Id: f79526b3-641e-4ad2-bd40-08db2c4f59d1 X-MS-Exchange-CrossTenant-AuthSource: TY2PR01MB4107.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2023 10:05:52.5575 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a208d369-cd4e-4f87-b119-98eaf31df2c3 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /xvm+lFqhoHOTyY7d92USzvvnX/d7NQc5vJC1qfXbMw55D3ls9WVHdL/llZCmeLjJlOx+oLdziu5uPdmG7LYGw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB8376 Subject: [ovs-dev] [PATCH v10 2/5] tnl-ports: Support multiple nw_protos. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" In some tunnels, inner packet needs to support both IPv4 and IPv6. Therefore, this patch improves to allow two protocols to be tied together in one tunneling. Signed-off-by: Nobuhiro MIKI --- lib/tnl-ports.c | 83 ++++++++++++++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 32 deletions(-) diff --git a/lib/tnl-ports.c b/lib/tnl-ports.c index 050eafa6b8c3..3948bc10e6b0 100644 --- a/lib/tnl-ports.c +++ b/lib/tnl-ports.c @@ -161,40 +161,31 @@ map_insert_ipdev__(struct ip_device *ip_dev, char dev_name[], } } -static uint8_t -tnl_type_to_nw_proto(const char type[]) +static void +tnl_type_to_nw_proto(const char type[], uint8_t nw_protos[2]) { - if (!strcmp(type, "geneve")) { - return IPPROTO_UDP; + nw_protos[0] = nw_protos[1] = 0; + + if (!strcmp(type, "geneve") || !strcmp(type, "vxlan") || + !strcmp(type, "gtpu")) { + nw_protos[0] = IPPROTO_UDP; + } else if (!strcmp(type, "stt")) { + nw_protos[0] = IPPROTO_TCP; + } else if (!strcmp(type, "gre") || !strcmp(type, "erspan") || + !strcmp(type, "ip6erspan") || !strcmp(type, "ip6gre")) { + nw_protos[0] = IPPROTO_GRE; + } else if (!strcmp(type, "srv6")) { + nw_protos[0] = IPPROTO_IPIP; + nw_protos[1] = IPPROTO_IPV6; } - if (!strcmp(type, "stt")) { - return IPPROTO_TCP; - } - if (!strcmp(type, "gre") || !strcmp(type, "erspan") || - !strcmp(type, "ip6erspan") || !strcmp(type, "ip6gre")) { - return IPPROTO_GRE; - } - if (!strcmp(type, "vxlan")) { - return IPPROTO_UDP; - } - if (!strcmp(type, "gtpu")) { - return IPPROTO_UDP; - } - return 0; } -void -tnl_port_map_insert(odp_port_t port, ovs_be16 tp_port, - const char dev_name[], const char type[]) +static void +tnl_port_map_insert__(odp_port_t port, ovs_be16 tp_port, + const char dev_name[], uint8_t nw_proto) { struct tnl_port *p; struct ip_device *ip_dev; - uint8_t nw_proto; - - nw_proto = tnl_type_to_nw_proto(type); - if (!nw_proto) { - return; - } ovs_mutex_lock(&mutex); LIST_FOR_EACH(p, node, &port_list) { @@ -220,6 +211,22 @@ out: ovs_mutex_unlock(&mutex); } +void +tnl_port_map_insert(odp_port_t port, ovs_be16 tp_port, + const char dev_name[], const char type[]) +{ + uint8_t nw_protos[2]; + int i; + + tnl_type_to_nw_proto(type, nw_protos); + + for (i = 0; i < 2; i++) { + if (nw_protos[i]) { + tnl_port_map_insert__(port, tp_port, dev_name, nw_protos[i]); + } + } +} + static void tnl_port_unref(const struct cls_rule *cr) { @@ -256,14 +263,11 @@ ipdev_map_delete(struct ip_device *ip_dev, ovs_be16 tp_port, uint8_t nw_proto) } } -void -tnl_port_map_delete(odp_port_t port, const char type[]) +static void +tnl_port_map_delete__(odp_port_t port, uint8_t nw_proto) { struct tnl_port *p; struct ip_device *ip_dev; - uint8_t nw_proto; - - nw_proto = tnl_type_to_nw_proto(type); ovs_mutex_lock(&mutex); LIST_FOR_EACH_SAFE (p, node, &port_list) { @@ -280,6 +284,21 @@ tnl_port_map_delete(odp_port_t port, const char type[]) ovs_mutex_unlock(&mutex); } +void +tnl_port_map_delete(odp_port_t port, const char type[]) +{ + uint8_t nw_protos[2]; + int i; + + tnl_type_to_nw_proto(type, nw_protos); + + for (i = 0; i < 2; i++) { + if (nw_protos[i]) { + tnl_port_map_delete__(port, nw_protos[i]); + } + } +} + /* 'flow' is non-const to allow for temporary modifications during the lookup. * Any changes are restored before returning. */ odp_port_t From patchwork Fri Mar 24 10:05:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nobuhiro MIKI X-Patchwork-Id: 1760698 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::136; helo=smtp3.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=NlxJ7X/8; dkim-atps=neutral Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4PjdC33Bk7z1yXv for ; Fri, 24 Mar 2023 21:06:07 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 54449615F6; Fri, 24 Mar 2023 10:06:04 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 54449615F6 Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key, unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=NlxJ7X/8 X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 6TTHjVCgMk_5; Fri, 24 Mar 2023 10:06:03 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id E0E19615C6; Fri, 24 Mar 2023 10:06:01 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org E0E19615C6 Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id ED2FAC0093; Fri, 24 Mar 2023 10:05:58 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 72BE2C0032 for ; Fri, 24 Mar 2023 10:05:57 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 2D124840E0 for ; Fri, 24 Mar 2023 10:05:57 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 2D124840E0 Authentication-Results: smtp1.osuosl.org; dkim=pass (1024-bit key, unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=NlxJ7X/8 X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id QA6l6vBD_NPK for ; Fri, 24 Mar 2023 10:05:56 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org B2AFF840D4 Received: from corp-ob10.yahoo-corp.jp (corp-ob10.yahoo-corp.jp [182.22.125.210]) by smtp1.osuosl.org (Postfix) with ESMTPS id B2AFF840D4 for ; Fri, 24 Mar 2023 10:05:55 +0000 (UTC) Received: from JPN01-TYC-obe.outbound.protection.outlook.com (mail-tycjpn01lp2176.outbound.protection.outlook.com [104.47.23.176]) by corp-ob10.yahoo-corp.jp (Postfix) with ESMTPS id 092DE19FB182 for ; Fri, 24 Mar 2023 19:05:54 +0900 (JST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FWCey6AKIUk5PJsZH+TpE65kCQlF7dmDLelnHyWd8hAjAtuJkGYEXlEK9b2MDC1SSsqhZmWw2Zosli+lRjaxiHy8nG2I4NXagjmyunLNc+b3d9aHLzOX+Y2cqXenk2HZ/LzX+5K3LwizXK9XMaxb80uu6FfHNPjq4NEjq4Qr0cXqyslcyZFWK8GcY9u+uqajAGjYbBM9rLceVMlkgosNtlluegEouJF///YykCWyZafWQF5rT4wj53P9/Ap44fVfmwU3gPeK7YGP+JMwpAhbHaVQYw0CRMDDOOuaIsxj/7qbJC7YwDefuplLrC7jiE0uUxrgzC1KPepQU29F7bv3ZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gz8d7RUbLFzyjvKK6UVLNaPVa9SeqXdTvmQmAqBFAH0=; b=f4YdKVkcL0zRinE1kwuwgfAid60Mx/0CTxfrSVkGd4xdxj7Av76kM6kis8bPyyzb8fmp4J3nsAwD1a4ClG0pS4LE+fATCJCkQSGjo4SWW2TwfHqs9dxhKjjGlQ57Mlt7PyTLbD1xiFgHBYSx/3TeC0TWaISqIMCC5ArO3dxJQ+CmVYu3rt66rNQ2QLSXgIOT6MhOhTZKTA5Cnw92N4MSPltMeq1vxEldAV7Bwj8zQk0eFjuAFeoE6unhrLAkTF621RQrkxdzrL7FPC2j9J7a20KNGTcElilsQW95Yt19vTLw4rwqrMQsoTzFTjOSFwuLg8Qd/epZtc2SpMzhWaZN3Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=yahoo-corp.jp; dmarc=pass action=none header.from=yahoo-corp.jp; dkim=pass header.d=yahoo-corp.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo-corp.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gz8d7RUbLFzyjvKK6UVLNaPVa9SeqXdTvmQmAqBFAH0=; b=NlxJ7X/8slDaBICbk81uUANo5vrhneXBiNG0s3n4jHj/8Nuh+7qEr8D6dr+F4+eRjUz/Jhf+rH7QbkLLXsxC5yPAEmRoRrFkOZlJsIJl0QGf0RUG9NC+9/oZpzTJ/1rERh0tdg7Qem+WgIXLT//HMgD+oH9A10KTbKV3B7PRARY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=yahoo-corp.jp; Received: from TY2PR01MB4107.jpnprd01.prod.outlook.com (2603:1096:404:d8::23) by TYCPR01MB8376.jpnprd01.prod.outlook.com (2603:1096:400:150::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.38; Fri, 24 Mar 2023 10:05:53 +0000 Received: from TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::61fe:e4c3:a819:6ce6]) by TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::61fe:e4c3:a819:6ce6%7]) with mapi id 15.20.6178.038; Fri, 24 Mar 2023 10:05:53 +0000 From: Nobuhiro MIKI To: dev@openvswitch.org Date: Fri, 24 Mar 2023 19:05:36 +0900 Message-Id: <20230324100538.70290-4-nmiki@yahoo-corp.jp> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20230324100538.70290-1-nmiki@yahoo-corp.jp> References: <20230324100538.70290-1-nmiki@yahoo-corp.jp> X-ClientProxiedBy: TYAPR01CA0125.jpnprd01.prod.outlook.com (2603:1096:404:2d::17) To TY2PR01MB4107.jpnprd01.prod.outlook.com (2603:1096:404:d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PR01MB4107:EE_|TYCPR01MB8376:EE_ X-MS-Office365-Filtering-Correlation-Id: 539f7a17-3c7f-4a1b-6b93-08db2c4f5a01 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: d2T+1R0n1jOdEVk99CrLO7TM3ZRnyXWt+q1UMs3oDjcry/y69fZXiraebDMs9ApnZA2o6kJnC7ZxItWitGksaLzZEjIUR00+6ksk9ufjYP1YfdlNHr2MovB5eJYaX4mxddwH/DKudttiEOHhgz78mWAZ3EjgevAbP3Htdqxudl3kjCh8O6SRAWX1vEonEEKUaW/2sQN5PTfutZcGTXBgpfiBFt0ctW6++Kt2d75p70uQlzWeCLle5k43ehH5dBByZwjlG32s3609SEwn4fruadAt+C/baygRkwKdr1ub5bwDta6UbxjMSwp10La/pKxMxZwt9hdVaTFyGSYCPrAZtBeMfKYnY/eZHDGbKSrWWTVMo9oyoL8G6L3UXhwcnwW21sQnaDUMpKA9ycprFW6p4rVioQYM30ZNt1680Tcgar3cNrsajSVBD8x4XbXpHQMJjOirWnipMSEl9vvrJE6/RFJ2P5i4TwH9a88DuQ4K6jwyuvVf63lzOvoGu0muxDb8gomOhIuusXykX1psOyXYs8OZIzQrhy4MT7TG7ImW576rNbsL3C+DmxVtwvFQG1tsm2tkCJqzRj59rJWTrjQcjEvGZdnlKLovUO8A/o88zeN8+VLYq8gW4qNWBpZa3Qn6qKQldTNz/DYfiFYCHRZhDe/0Ymj9edBZHKyelQOdBsAmPaTLpGRHdE4GfgKvwtP/zbuOxuTkWPgrohtR/hLFGg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TY2PR01MB4107.jpnprd01.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(4636009)(39860400002)(346002)(136003)(366004)(396003)(376002)(451199018)(36756003)(66476007)(8676002)(4326008)(66556008)(66946007)(6916009)(5660300002)(82960400001)(316002)(6512007)(6666004)(26005)(1076003)(6506007)(8936002)(41300700001)(186003)(478600001)(2616005)(6486002)(83380400001)(107886003)(52116002)(86362001)(38100700002)(38350700002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: hd3OOTAszoHRmvjTfdiOdKOxyHMy1JsMKR0T+MpzIjI9gLq90ADzLb4ro9xKmDJJRRZC2y4hcAIjD3zrIpQcNREdgvEZLyhFyxmEv8+8QXe0001i/BTEWJ7M11CS2+r8Djbrw6+qIQ1XP5cEkcDoReI4+t//YrlaHnV5H20CFP1c2W/NZ2rwnAVC2fVVjacYPJ2ithmVajkMWzlva52OYktbMNuEPtJttBHlXv48oPilpnqjg9Jn0ALZkDiFa4uhVN9ShZi85WxFs9SyQoaj5YqiQOW4OR28oz7ucK4WTvXPcID4rnsbipawphtefkUD3g4nWqvZQNJr/dhA/EtSQ98rIy28EsjBLSbyjfHR2s2doYJO8Jps5qdSwnfBjdtFHCyCpWG9hKg6elkMwgmNpA7NuF0vsvb6bwnlpHjqdza5VQaBHxVfQQJ9IOMr26zm0+oGGZ8GNxr0wA4Fs3m3PTbaowiFjIf0aKAnAw02DyhWz99XZlTUwuIOCYYgiCHY3KKdUaKmuvqXudPMbFnduNLscNm7GSTJ/pN9PakXR25udMvi27Ta3oLlh4eTM/csr9lhr8WVzzgLKrcbXnKh0T98StvWjEMTafNT9fOgFjwMSzSLQRxb57qzpxxnn+C0ape9DiscfGPRCMZ77daALvX0sFzQULxRXEYKVAHEPs9NknGAcIkb6M3btJZqRAsRTnBHTtK/Yw+lt8sxZMzdbUyEzu/gXllCumqCNFMwYP2nvlGhKR4wePop2ZePk58TYiacXCaZ3wQ9vU0x3UFwr8WAPtL5uGVmCVWwLnEN5WiFnXlJ22MYes7g98O8aq76cLDqWDCSyfzrfNiN7aRN2TZu6JmMFoiTBpbp6awKx6HiF39/CYzr21GyesOvZF0ejTCPCjc17L63rL6SdwSeJ4auwUTAk3uOVuEJUHuvcMWHXjd7J0i7yOZI4YPSzVSg7CvBV7pJyA9usyz/y3QOSJHM05YaHsk8cKz4D6L5MnvLu2JcfZQ847y2B3RIkxQ9mVv6JsF75HR0SKZnwALbvD7NYATzG9DPuMNLEgWeyCmqyl+VxsWBdyXS3qWL41jPrfcCce1eFRbaYwqq5buMoPyStGBsD62PJqguvCllLLGwopSdAP4LraLC3XurxPseP8bsR5KY7OX0K5HbdgaHgaYJ/qssDxlngXget9yfeyzU9SE0DvtpXZ5dYwab8grPrs/pTSLT4K4ANzlPn+47tbTQEx6c4hEJpx5AJuFq5ANN1A72LmsF2rmPmbkxPDfZMSXSeHj4M/x136iAyjYNYXcpPB3LyXDBNmDlEYdmRqzqpTf/3Za0GRqJPP/NtolefDEGXXIxsoYlONXP1ZCU2+fbEei0YqWg4KPCm5krCS1MTFeArwdbmmbNhpPaz2wBfde3hryAtI5cZIZZ6hzQNacQTol13Xk/+tNfA/NyIbAxHgKzgTNShPWE4eaXGi5YadCeev0f0a3ZyfcH94MnCyWVG3508e4CaRtWPO6attIVi2VS6BcBRwguNHfx6n26asCuKHweOWPGM1vsWH4hV+6/chaQnXgWIXh7GsM2cMB9gelvkY5R3Ze42OSmd62q X-OriginatorOrg: yahoo-corp.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 539f7a17-3c7f-4a1b-6b93-08db2c4f5a01 X-MS-Exchange-CrossTenant-AuthSource: TY2PR01MB4107.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2023 10:05:52.9794 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a208d369-cd4e-4f87-b119-98eaf31df2c3 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: PaQO4fO7Cs5wjziS4Y4PJ3chbbIHliK+ke9MZlY4fkeKClYCHf8op2Je2+tru54jnhQWW89PDHpyq67SHun1AQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB8376 Subject: [ovs-dev] [PATCH v10 3/5] flow: Support rt_hdr in parse_ipv6_ext_hdrs(). X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Checks whether IPPROTO_ROUTING exists in the IPv6 extension headers. If it exists, the first address is retrieved. If NULL is specified for "frag_hdr" and/or "rt_hdr", those addresses in the header are not reported to the caller. Of course, "frag_hdr" and "rt_hdr" are properly parsed inside this function. Signed-off-by: Nobuhiro MIKI --- lib/conntrack.c | 4 ++-- lib/flow.c | 48 +++++++++++++++++++++++++++++++++++++----------- lib/flow.h | 3 ++- lib/ipf.c | 15 ++++++++------- lib/packets.h | 9 +++++++++ 5 files changed, 58 insertions(+), 21 deletions(-) diff --git a/lib/conntrack.c b/lib/conntrack.c index 8cf7779c6703..f86fa26f466d 100644 --- a/lib/conntrack.c +++ b/lib/conntrack.c @@ -1617,8 +1617,8 @@ extract_l3_ipv6(struct conn_key *key, const void *data, size_t size, uint8_t nw_proto = ip6->ip6_nxt; uint8_t nw_frag = 0; - const struct ovs_16aligned_ip6_frag *frag_hdr; - if (!parse_ipv6_ext_hdrs(&data, &size, &nw_proto, &nw_frag, &frag_hdr)) { + if (!parse_ipv6_ext_hdrs(&data, &size, &nw_proto, &nw_frag, + NULL, NULL)) { return false; } diff --git a/lib/flow.c b/lib/flow.c index c3a3aa3ce45d..9501a259e9d4 100644 --- a/lib/flow.c +++ b/lib/flow.c @@ -479,9 +479,17 @@ invalid: static inline bool parse_ipv6_ext_hdrs__(const void **datap, size_t *sizep, uint8_t *nw_proto, uint8_t *nw_frag, - const struct ovs_16aligned_ip6_frag **frag_hdr) + const struct ovs_16aligned_ip6_frag **frag_hdr, + const struct ip6_rt_hdr **rt_hdr) { - *frag_hdr = NULL; + if (frag_hdr) { + *frag_hdr = NULL; + } + + if (rt_hdr) { + *rt_hdr = NULL; + } + while (1) { if (OVS_LIKELY((*nw_proto != IPPROTO_HOPOPTS) && (*nw_proto != IPPROTO_ROUTING) @@ -504,7 +512,6 @@ parse_ipv6_ext_hdrs__(const void **datap, size_t *sizep, uint8_t *nw_proto, } if ((*nw_proto == IPPROTO_HOPOPTS) - || (*nw_proto == IPPROTO_ROUTING) || (*nw_proto == IPPROTO_DSTOPTS)) { /* These headers, while different, have the fields we care * about in the same location and with the same @@ -515,6 +522,18 @@ parse_ipv6_ext_hdrs__(const void **datap, size_t *sizep, uint8_t *nw_proto, (ext_hdr->ip6e_len + 1) * 8))) { return false; } + } else if (*nw_proto == IPPROTO_ROUTING) { + const struct ip6_rt_hdr *tmp; + if (!rt_hdr) { + rt_hdr = &tmp; + } + + *rt_hdr = *datap; + *nw_proto = (*rt_hdr)->nexthdr; + if (OVS_UNLIKELY(!data_try_pull(datap, sizep, + ((*rt_hdr)->hdrlen + 1) * 8))) { + return false; + } } else if (*nw_proto == IPPROTO_AH) { /* A standard AH definition isn't available, but the fields * we care about are in the same location as the generic @@ -527,6 +546,11 @@ parse_ipv6_ext_hdrs__(const void **datap, size_t *sizep, uint8_t *nw_proto, return false; } } else if (*nw_proto == IPPROTO_FRAGMENT) { + const struct ovs_16aligned_ip6_frag *tmp; + if (!frag_hdr) { + frag_hdr = &tmp; + } + *frag_hdr = *datap; *nw_proto = (*frag_hdr)->ip6f_nxt; @@ -561,15 +585,19 @@ parse_ipv6_ext_hdrs__(const void **datap, size_t *sizep, uint8_t *nw_proto, * has FLOW_NW_FRAG_LATER set. Both first and later fragments have * FLOW_NW_FRAG_ANY set in 'nw_frag'. * + * If a routing header is found, '*rt_hdr' is set to the routing + * header and otherwise set to NULL. + * * A return value of false indicates that there was a problem parsing * the extension headers.*/ bool parse_ipv6_ext_hdrs(const void **datap, size_t *sizep, uint8_t *nw_proto, uint8_t *nw_frag, - const struct ovs_16aligned_ip6_frag **frag_hdr) + const struct ovs_16aligned_ip6_frag **frag_hdr, + const struct ip6_rt_hdr **rt_hdr) { return parse_ipv6_ext_hdrs__(datap, sizep, nw_proto, nw_frag, - frag_hdr); + frag_hdr, rt_hdr); } bool @@ -945,9 +973,8 @@ miniflow_extract(struct dp_packet *packet, struct miniflow *dst) nw_ttl = nh->ip6_hlim; nw_proto = nh->ip6_nxt; - const struct ovs_16aligned_ip6_frag *frag_hdr; - if (!parse_ipv6_ext_hdrs__(&data, &size, &nw_proto, &nw_frag, - &frag_hdr)) { + if (!parse_ipv6_ext_hdrs(&data, &size, &nw_proto, &nw_frag, + NULL, NULL)) { goto out; } @@ -1200,10 +1227,9 @@ parse_tcp_flags(struct dp_packet *packet, plen = ntohs(nh->ip6_plen); /* Never pull padding. */ dp_packet_set_l2_pad_size(packet, size - plen); size = plen; - const struct ovs_16aligned_ip6_frag *frag_hdr; nw_proto = nh->ip6_nxt; - if (!parse_ipv6_ext_hdrs__(&data, &size, &nw_proto, &nw_frag, - &frag_hdr)) { + if (!parse_ipv6_ext_hdrs(&data, &size, &nw_proto, &nw_frag, + NULL, NULL)) { return 0; } } else { diff --git a/lib/flow.h b/lib/flow.h index c647ad83c256..a9d026e1ce3b 100644 --- a/lib/flow.h +++ b/lib/flow.h @@ -132,7 +132,8 @@ void packet_expand(struct dp_packet *, const struct flow *, size_t size); bool parse_ipv6_ext_hdrs(const void **datap, size_t *sizep, uint8_t *nw_proto, uint8_t *nw_frag, - const struct ovs_16aligned_ip6_frag **frag_hdr); + const struct ovs_16aligned_ip6_frag **frag_hdr, + const struct ip6_rt_hdr **rt_hdr); bool parse_nsh(const void **datap, size_t *sizep, struct ovs_key_nsh *key); uint16_t parse_tcp_flags(struct dp_packet *packet, ovs_be16 *dl_type_p, uint8_t *nw_frag_p, ovs_be16 *first_vlan_tci_p); diff --git a/lib/ipf.c b/lib/ipf.c index d452663743c5..affd440f6387 100644 --- a/lib/ipf.c +++ b/lib/ipf.c @@ -485,9 +485,9 @@ ipf_reassemble_v6_frags(struct ipf_list *ipf_list) const void *data = l3 + 1; size_t datasize = pl; - const struct ovs_16aligned_ip6_frag *frag_hdr = NULL; - if (!parse_ipv6_ext_hdrs(&data, &datasize, &nw_proto, &nw_frag, &frag_hdr) - || !nw_frag || !frag_hdr) { + const struct ovs_16aligned_ip6_frag *frag_hdr; + if (!parse_ipv6_ext_hdrs(&data, &datasize, &nw_proto, &nw_frag, &frag_hdr, + NULL) || !nw_frag || !frag_hdr) { ipf_print_reass_packet("Unparsed reassembled v6 packet; v6 hdr:", l3); dp_packet_delete(pkt); @@ -678,9 +678,9 @@ ipf_is_valid_v6_frag(struct ipf *ipf, struct dp_packet *pkt) uint8_t nw_proto = l3->ip6_nxt; const void *data = l3 + 1; size_t datasize = l3_size - l3_hdr_size; - const struct ovs_16aligned_ip6_frag *frag_hdr = NULL; + const struct ovs_16aligned_ip6_frag *frag_hdr; if (!parse_ipv6_ext_hdrs(&data, &datasize, &nw_proto, &nw_frag, - &frag_hdr) || !nw_frag || !frag_hdr) { + &frag_hdr, NULL) || !nw_frag || !frag_hdr) { return false; } @@ -721,9 +721,10 @@ ipf_v6_key_extract(struct dp_packet *pkt, ovs_be16 dl_type, uint16_t zone, uint8_t nw_proto = l3->ip6_nxt; const void *data = l3 + 1; size_t datasize = dp_packet_l3_size(pkt) - sizeof *l3; - const struct ovs_16aligned_ip6_frag *frag_hdr = NULL; + const struct ovs_16aligned_ip6_frag *frag_hdr; - parse_ipv6_ext_hdrs(&data, &datasize, &nw_proto, &nw_frag, &frag_hdr); + parse_ipv6_ext_hdrs(&data, &datasize, &nw_proto, &nw_frag, &frag_hdr, + NULL); ovs_assert(nw_frag && frag_hdr); ovs_be16 ip6f_offlg = frag_hdr->ip6f_offlg; *start_data_byte = ntohs(ip6f_offlg & IP6F_OFF_MASK) + diff --git a/lib/packets.h b/lib/packets.h index 8626aac8d53f..70cd072228ae 100644 --- a/lib/packets.h +++ b/lib/packets.h @@ -988,6 +988,15 @@ struct ovs_16aligned_ip6_frag { ovs_16aligned_be32 ip6f_ident; }; +#define IP6_RT_HDR_LEN 4 +struct ip6_rt_hdr { + uint8_t nexthdr; + uint8_t hdrlen; + uint8_t type; + uint8_t segments_left; +}; +BUILD_ASSERT_DECL(IP6_RT_HDR_LEN == sizeof(struct ip6_rt_hdr)); + #define ICMP6_HEADER_LEN 4 struct icmp6_header { uint8_t icmp6_type; From patchwork Fri Mar 24 10:05:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nobuhiro MIKI X-Patchwork-Id: 1760701 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.138; helo=smtp1.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=XxpdWAdk; dkim-atps=neutral Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4PjdCG0C27z1yXv for ; Fri, 24 Mar 2023 21:06:17 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 9C181841FE; Fri, 24 Mar 2023 10:06:15 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 9C181841FE Authentication-Results: smtp1.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key, unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=XxpdWAdk X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id gjeGXDVjH4iQ; Fri, 24 Mar 2023 10:06:09 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp1.osuosl.org (Postfix) with ESMTPS id E5841841B4; Fri, 24 Mar 2023 10:06:07 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org E5841841B4 Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 9D66EC0098; Fri, 24 Mar 2023 10:06:03 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2557CC009B for ; Fri, 24 Mar 2023 10:06:00 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id F3363840D4 for ; Fri, 24 Mar 2023 10:05:58 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org F3363840D4 X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id rhSfbfjRPEos for ; Fri, 24 Mar 2023 10:05:57 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org E3D66840D9 Received: from corp-ob09.yahoo-corp.jp (corp-ob09.yahoo-corp.jp [182.22.125.216]) by smtp1.osuosl.org (Postfix) with ESMTPS id E3D66840D9 for ; Fri, 24 Mar 2023 10:05:56 +0000 (UTC) Received: from JPN01-TYC-obe.outbound.protection.outlook.com (mail-tycjpn01lp2171.outbound.protection.outlook.com [104.47.23.171]) by corp-ob09.yahoo-corp.jp (Postfix) with ESMTPS id 1326D19FB185 for ; Fri, 24 Mar 2023 19:05:55 +0900 (JST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dgdbYi9SdiCElTWnfbfFykDRlX/BJQEo1vAKpzzGMqba63pY6njbQOMLr0Nz5E76yfVuT0DIfB5cy1Sb3aB6V/FsfZK/hM8XdkYuNUn8ZnB8LMifQ0vShJcWeA/1ViKEYDJ1N4u5oHhzPPXgJx4yBRQ0br5LaD7+7MAzAejvXpaapYcJObDKSkYdVfu3XVrGaV77NyUkhdiZksiYKmKozwE6unEw0onHzi2N9PBLBKMPWRe+orA0/pBu3FpRHvyQuGZmYBSsllZxdGXxD6+qd78ATo5r1flHBf6xRSxBScXD9aXTm/Y680usi+5NZ2QwnKoA3NMNjqevPXqV4PTVEg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LL4280BS3m1RQLAVhhMtjj99TcY3mUsnNvtix+ZUhq8=; b=jLiDItLfrJQqmb1ByVTBi8PkOS2+ESVI6VVX15dq6ffyIWf11Dm80sTBHiVfMQ+y1gnWVcCkQosJOy6S2kv4GYnu4kz+u6C9UAU+XCdgltoQNw/EGb69CWtK/G9AxW86cI50H31tQUYsJ/CgcQIF8rZaYLL8/p54kfzs27v03u2zvIycAnLtEjH99mv5QZfKZ4uaEaxkj0CwlUbpz131x3bjRSTyfA83/7/emYDRweiyAhp2PC0NkajOiMKqVcVaiyiis26xfdzsEkf+opMyBX/LXAZXzoZJRGfcRhMheacbel/k+r0esyU/u4DrtzB+GdzHrcYwwHT2vCfybWF83w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=yahoo-corp.jp; dmarc=pass action=none header.from=yahoo-corp.jp; dkim=pass header.d=yahoo-corp.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo-corp.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LL4280BS3m1RQLAVhhMtjj99TcY3mUsnNvtix+ZUhq8=; b=XxpdWAdkOibEO4ltjcWWC0lFNQfZbv8t8nex6KnpP4DNKTg1pAyrhKIyqb1Kgtt2m9oSawQvN9v5PBxIyweCsBViCdHFFd89OoPoVJedM9RbyhEgZAXr520RIswqnBIdArc4PIwVZUaDHhh1Hs0UTdeEHAkGvW7DIO38VKhsR6Q= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=yahoo-corp.jp; Received: from TY2PR01MB4107.jpnprd01.prod.outlook.com (2603:1096:404:d8::23) by TYCPR01MB8376.jpnprd01.prod.outlook.com (2603:1096:400:150::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.38; Fri, 24 Mar 2023 10:05:53 +0000 Received: from TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::61fe:e4c3:a819:6ce6]) by TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::61fe:e4c3:a819:6ce6%7]) with mapi id 15.20.6178.038; Fri, 24 Mar 2023 10:05:53 +0000 From: Nobuhiro MIKI To: dev@openvswitch.org Date: Fri, 24 Mar 2023 19:05:37 +0900 Message-Id: <20230324100538.70290-5-nmiki@yahoo-corp.jp> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20230324100538.70290-1-nmiki@yahoo-corp.jp> References: <20230324100538.70290-1-nmiki@yahoo-corp.jp> X-ClientProxiedBy: TYAPR01CA0125.jpnprd01.prod.outlook.com (2603:1096:404:2d::17) To TY2PR01MB4107.jpnprd01.prod.outlook.com (2603:1096:404:d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PR01MB4107:EE_|TYCPR01MB8376:EE_ X-MS-Office365-Filtering-Correlation-Id: 1b258a12-780a-4efa-7a26-08db2c4f5a52 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xmqZ+/QOMM7EeNgzky+Xye5HzOqkH/WbCry5oUt/dvMEabfwiqKVqDeeAcS8ztunDnxvxcVFyDzVGDGMW4Lsqdk2BFgj3gjXk4YlJdFh6jjauunOJ8cHvVjc7KYKXbUzYD7/VEcFGXB0sweqmvmSC179apeJVQ50Ey3fTrnDjvqSx+j6bNmu+qwBhetCoKPUC8lz8nG6hv4Cl0Nfyxv1bVmfC/WmpubS8FP7eTmdpiF5p0Bfu2+PdcbeJHYlDgtdxItCxPPRV42phZALPHYo0qU8OC6ldwd0ucxc9GmJvG/rxgerR+GGHT9BpBzPYhpMz7zc+BIqMnYNdAHBhhuJR+y/z4ZVKeRvLKZ5LWs+Nf2X0Wv4Saq9UwP57KZxGPvfM2Q/WHcuzgtdYsJnfkkg0y6qpmrIEdShW+NZblVSf39CVgUcRkftmHiuwtaSpEGedp6Kvde6TBi4t5ET+FBFdgtqy/uCLsj7krQCUZlU9snfH0b4hmcDF8bQFQ32Sp975TuLcbzs3QPudwMqKC5cOAmbb2zsd1hgN0a1635EbaEhlqDW/JRZSj4hJvLaDHN8heZVzsR++hXqwEXt8cGjVSEk2DYTRHgvkZ/OWjOoraOfIfcpcl2RJdKZOGjKIRTXTJRMpG0pdPQaDmqq6NeS2QC/YmWBkHbbcliyGhddU/Ad8QmKdAOTclwv/EZc69Vy3kRwqi0+OkkZ48cmmAgwCg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TY2PR01MB4107.jpnprd01.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(4636009)(39860400002)(346002)(136003)(366004)(396003)(376002)(451199018)(36756003)(66476007)(8676002)(4326008)(66556008)(66946007)(30864003)(6916009)(5660300002)(82960400001)(316002)(6512007)(6666004)(26005)(1076003)(6506007)(8936002)(41300700001)(186003)(478600001)(966005)(2616005)(6486002)(83380400001)(107886003)(52116002)(86362001)(38100700002)(38350700002)(2906002)(21314003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: mwbBmL+qcrFyxjUIAz2SNgeQaIkJoH7GgRg16Zd4z4ctPTaZjnEvGB2KTAY6FemkDB53NCnIpcSQ/5pGWvCJBsI+2Ua2nBPYpbQtyhNOkOPShL/iwCF9JVWhpH23gm3fs72sQD4KhKFn3inPqUeIpZmPMsYcVIpI308JBMjKeD/ojytdp7MiI5Eykqd6ShhB5hFs/48IxuhmXM3clYkijYFAUtlzyz/6qSquhJndK8OyfvlIYoXo9VmcH/lXYZJgc1OKo7QCTM5jlO5TubyS3/Cs9gU/exLw+XuYF4bRRlVqRWpRV1p4G/9cZrlOjY+vQou8/OPN6GDZIV+/ulWiJzv1qHMg3ok/c0o5bbtzG1Gc6TlL1obC3RGkZOy39xTJXoVyT4RoftgqzzbHP2q3EEgtCPZJc0YBswodSLq0FUUKLvnwdI2q7EENkvmnppESn2zKymunGXtaHtp6QCIABAGvIjyGarOVCWzksb2/pSxEUQwGz+7giEAAWVFAcIptbyvgHaWOB0kWngowRkN1CjwEjeNQPwM98gVeEZOs9okF6dBEmX3vpVq/E1WZpq6r8QeNiAcVYTP9blnb7eA4mAcEVhd7+jVOKKeDsfAs5dHnXehb4M/T0FaCZvd6F+Vw2M7dLLXViZUNDiOIGsXC4lB7NjnSrOxNJM8BrWjI4OrTllOBV69dgRjxbXp/4mQMJ3aHZidEYWI+7FfbdyKE501o92QjFEqUZxoGpP3yXXUm1jm4iduPW5lxYNuMQ1DgRbo7xsSQxi4Jbpy+4UrhPItRWryo+34ZeEEYVjy3djgm2YyR1TK0JvX+b453wVkDJ1/Lw6eTvu25ndTLWuoPOXNLCImCW1lcq7lmtt4hrANdzsyhzYJk9zS0wLgj7dypBYGh8/jEqlYEFHUx4hVjgcUkhZjHLkij15RuZ4AFD3wn3L6C70aYjxshYsZrIwlOYgGjwANbg7thfO9rAmUp5ig5hqf0dFvVWkgeEcdaXM+LE/qr5e7TqdY8ltgwTN8JiGmFVUpnDUMZUzK4f/as2KxeGskOVWWK8/0LFpqiRZRRVCm5tH5IV3OlOwsFg4Q9MjnyNGY8OJswQ+9lDZp6yfPmGakhSf0JaJu6dIVUwyz1r+1osqERWZOWQl/BvA80mPn25g73Lz6MQlJf5e22c+MN54YjZqxDjzpvUjLOV8DXusF5771RZEZnByBdPtxjhFzHItr+wUX8oTWOKUT8aY/KDDAEbjn0/5AfXfpWYKyfRJxbmgu3b5cpmPpRl/AivYKOARr9b6ofxEs8g6DYO4sgiJSf7l1p4/R3IrJQmTZi4wFHUxwdfwwEt1MUuxuOehU4cc8WySEM+2StcDGYrK5M+lXW7r6uNLFqgI+HM3e1Ue+RLiRVcN97m+3w2PFnDFoYmgprmvpGtFCxMYSfeqP33SxhQGdjU2NLo1/6E5xlKcfCYT6PA5rGjVsn6rdbIJNh633R4CnX2iSUjcYKObScCtdnqfuhYwBg/lQJpgedcnnQkwVLhgcIyaHaiH8+wlUR4Yh20kQc+exITw9+3IdjmUe69OSD05mFSuNfjQFtevnsf4bVuOLYGLNJLCgo X-OriginatorOrg: yahoo-corp.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 1b258a12-780a-4efa-7a26-08db2c4f5a52 X-MS-Exchange-CrossTenant-AuthSource: TY2PR01MB4107.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2023 10:05:53.4793 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a208d369-cd4e-4f87-b119-98eaf31df2c3 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: NvptG3muEN/HCeAiO7gVwd2RsMUx9+zbd4+gcc2tpemuoCk0OYxcCpg1zZEoEw/ccG8jI45caTfXLVgHBuCbmA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB8376 Subject: [ovs-dev] [PATCH v10 4/5] userspace: Add SRv6 tunnel support. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" SRv6 (Segment Routing IPv6) tunnel vport is responsible for encapsulation and decapsulation the inner packets with IPv6 header and an extended header called SRH (Segment Routing Header). See spec in: https://datatracker.ietf.org/doc/html/rfc8754 This patch implements SRv6 tunneling in userspace datapath. It uses `remote_ip` and `local_ip` options as with existing tunnel protocols. It also adds a dedicated `srv6_segs` option to define a sequence of routers called segment list. Signed-off-by: Nobuhiro MIKI --- Documentation/faq/configuration.rst | 21 +++++ Documentation/faq/releases.rst | 1 + NEWS | 2 + include/linux/openvswitch.h | 1 + lib/dpif-netlink-rtnl.c | 5 ++ lib/dpif-netlink.c | 5 ++ lib/netdev-native-tnl.c | 131 ++++++++++++++++++++++++++++ lib/netdev-native-tnl.h | 10 +++ lib/netdev-vport.c | 53 +++++++++++ lib/netdev.h | 4 + lib/packets.h | 11 +++ lib/tnl-ports.c | 6 +- ofproto/ofproto-dpif-xlate.c | 3 + tests/system-kmod-macros.at | 8 ++ tests/system-traffic.at | 119 +++++++++++++++++++++++++ tests/system-userspace-macros.at | 6 ++ tests/tunnel.at | 56 ++++++++++++ 17 files changed, 441 insertions(+), 1 deletion(-) diff --git a/Documentation/faq/configuration.rst b/Documentation/faq/configuration.rst index dc6c92446f98..4df390dc2d9d 100644 --- a/Documentation/faq/configuration.rst +++ b/Documentation/faq/configuration.rst @@ -238,6 +238,27 @@ Q: Does Open vSwitch support GTP-U? set int gtpu0 type=gtpu options:key= \ options:remote_ip=172.31.1.1 +Q: Does Open vSwitch support SRv6? + + A: Yes. Starting with version 3.2, the Open vSwitch userspace + datapath supports SRv6 (Segment Routing over IPv6). The following + example shows tunneling to fc00:300::1 via fc00:100::1 and fc00:200::1. + In the current implementation, if "IPv6 in IPv6" or "IPv4 in IPv6" packets + are routed to this interface, and these packets are not SRv6 packets, they + may be dropped, so be careful in workloads with a mix of these tunnels. + Also note the following restrictions: + + * Segment list length is limited to 6. + * SRv6 packets with other than segments_left = 0 are simply dropped. + + :: + + $ ovs-vsctl add-br br0 + $ ovs-vsctl add-port br0 srv6_0 -- \ + set int srv6_0 type=srv6 \ + options:remote_ip=fc00:100::1 \ + options:srv6_segs="fc00:100::1,fc00:200::1,fc00:300::1" + Q: How do I connect two bridges? A: First, why do you want to do this? Two connected bridges are not much diff --git a/Documentation/faq/releases.rst b/Documentation/faq/releases.rst index 9e1b42262000..9fb679e307d9 100644 --- a/Documentation/faq/releases.rst +++ b/Documentation/faq/releases.rst @@ -151,6 +151,7 @@ Q: Are all features available with all datapaths? Tunnel - ERSPAN 4.18 2.10 2.10 NO Tunnel - ERSPAN-IPv6 4.18 2.10 2.10 NO Tunnel - GTP-U NO NO 2.14 NO + Tunnel - SRv6 NO NO 3.2 NO Tunnel - Bareudp 5.7 NO NO NO QoS - Policing YES 1.1 2.6 NO QoS - Shaping YES 1.1 NO NO diff --git a/NEWS b/NEWS index 8771ee618aed..a8d77a75a248 100644 --- a/NEWS +++ b/NEWS @@ -21,6 +21,8 @@ Post-v3.1.0 * ovs-vswitchd will keep the CAP_SYS_RAWIO capability when started with the --hw-rawio-access command line option. This allows the process extra privileges when mapping physical interconnect memory. + - SRv6 Tunnel Protocol + * Only support for userspace datapath. v3.1.0 - 16 Feb 2023 diff --git a/include/linux/openvswitch.h b/include/linux/openvswitch.h index bc8f74991849..e305c331516b 100644 --- a/include/linux/openvswitch.h +++ b/include/linux/openvswitch.h @@ -254,6 +254,7 @@ enum ovs_vport_type { OVS_VPORT_TYPE_IP6GRE = 109, OVS_VPORT_TYPE_GTPU = 110, OVS_VPORT_TYPE_BAREUDP = 111, /* Bareudp tunnel. */ + OVS_VPORT_TYPE_SRV6 = 112, /* SRv6 tunnel. */ __OVS_VPORT_TYPE_MAX }; diff --git a/lib/dpif-netlink-rtnl.c b/lib/dpif-netlink-rtnl.c index 4fc42daed2d9..5788294ae0d7 100644 --- a/lib/dpif-netlink-rtnl.c +++ b/lib/dpif-netlink-rtnl.c @@ -129,6 +129,8 @@ vport_type_to_kind(enum ovs_vport_type type, } case OVS_VPORT_TYPE_GTPU: return NULL; + case OVS_VPORT_TYPE_SRV6: + return "srv6"; case OVS_VPORT_TYPE_BAREUDP: return "bareudp"; case OVS_VPORT_TYPE_NETDEV: @@ -319,6 +321,7 @@ dpif_netlink_rtnl_verify(const struct netdev_tunnel_config *tnl_cfg, case OVS_VPORT_TYPE_LISP: case OVS_VPORT_TYPE_STT: case OVS_VPORT_TYPE_GTPU: + case OVS_VPORT_TYPE_SRV6: case OVS_VPORT_TYPE_UNSPEC: case __OVS_VPORT_TYPE_MAX: default: @@ -411,6 +414,7 @@ dpif_netlink_rtnl_create(const struct netdev_tunnel_config *tnl_cfg, case OVS_VPORT_TYPE_LISP: case OVS_VPORT_TYPE_STT: case OVS_VPORT_TYPE_GTPU: + case OVS_VPORT_TYPE_SRV6: case OVS_VPORT_TYPE_UNSPEC: case __OVS_VPORT_TYPE_MAX: default: @@ -519,6 +523,7 @@ dpif_netlink_rtnl_port_destroy(const char *name, const char *type) case OVS_VPORT_TYPE_ERSPAN: case OVS_VPORT_TYPE_IP6ERSPAN: case OVS_VPORT_TYPE_IP6GRE: + case OVS_VPORT_TYPE_SRV6: case OVS_VPORT_TYPE_BAREUDP: return dpif_netlink_rtnl_destroy(name); case OVS_VPORT_TYPE_NETDEV: diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c index 7875e573e643..44da6f54c983 100644 --- a/lib/dpif-netlink.c +++ b/lib/dpif-netlink.c @@ -919,6 +919,9 @@ get_vport_type(const struct dpif_netlink_vport *vport) case OVS_VPORT_TYPE_GTPU: return "gtpu"; + case OVS_VPORT_TYPE_SRV6: + return "srv6"; + case OVS_VPORT_TYPE_BAREUDP: return "bareudp"; @@ -957,6 +960,8 @@ netdev_to_ovs_vport_type(const char *type) return OVS_VPORT_TYPE_GRE; } else if (!strcmp(type, "gtpu")) { return OVS_VPORT_TYPE_GTPU; + } else if (!strcmp(type, "srv6")) { + return OVS_VPORT_TYPE_SRV6; } else if (!strcmp(type, "bareudp")) { return OVS_VPORT_TYPE_BAREUDP; } else { diff --git a/lib/netdev-native-tnl.c b/lib/netdev-native-tnl.c index b89dfdd52a86..a284e2b9ec10 100644 --- a/lib/netdev-native-tnl.c +++ b/lib/netdev-native-tnl.c @@ -845,6 +845,137 @@ netdev_gtpu_build_header(const struct netdev *netdev, return 0; } +int +netdev_srv6_build_header(const struct netdev *netdev, + struct ovs_action_push_tnl *data, + const struct netdev_tnl_build_header_params *params) +{ + struct netdev_vport *dev = netdev_vport_cast(netdev); + struct netdev_tunnel_config *tnl_cfg; + const struct in6_addr *segs; + struct srv6_base_hdr *srh; + struct in6_addr *s; + ovs_be16 dl_type; + int err = 0; + int nr_segs; + int i; + + ovs_mutex_lock(&dev->mutex); + tnl_cfg = &dev->tnl_cfg; + + if (tnl_cfg->srv6_num_segs) { + nr_segs = tnl_cfg->srv6_num_segs; + segs = tnl_cfg->srv6_segs; + } else { + /* + * If explicit segment list setting is omitted, tunnel destination + * is considered to be the first segment list. + */ + nr_segs = 1; + segs = ¶ms->flow->tunnel.ipv6_dst; + } + + if (!ipv6_addr_equals(&segs[0], ¶ms->flow->tunnel.ipv6_dst)) { + err = EINVAL; + goto out; + } + + srh = netdev_tnl_ip_build_header(data, params, IPPROTO_ROUTING); + srh->rt_hdr.segments_left = nr_segs - 1; + srh->rt_hdr.type = IPV6_SRCRT_TYPE_4; + srh->rt_hdr.hdrlen = 2 * nr_segs; + srh->last_entry = nr_segs - 1; + srh->flags = 0; + srh->tag = 0; + + dl_type = params->flow->dl_type; + if (dl_type == htons(ETH_TYPE_IP)) { + srh->rt_hdr.nexthdr = IPPROTO_IPIP; + } else if (dl_type == htons(ETH_TYPE_IPV6)) { + srh->rt_hdr.nexthdr = IPPROTO_IPV6; + } + + s = ALIGNED_CAST(struct in6_addr *, + (char *) srh + sizeof *srh); + for (i = 0; i < nr_segs; i++) { + /* Segment list is written to the header in reverse order. */ + memcpy(s, &segs[nr_segs - i - 1], sizeof *s); + s++; + } + + data->header_len += sizeof *srh + 8 * srh->rt_hdr.hdrlen; + data->tnl_type = OVS_VPORT_TYPE_SRV6; +out: + ovs_mutex_unlock(&dev->mutex); + + return err; +} + +void +netdev_srv6_push_header(const struct netdev *netdev OVS_UNUSED, + struct dp_packet *packet OVS_UNUSED, + const struct ovs_action_push_tnl *data OVS_UNUSED) +{ + int ip_tot_size; + + netdev_tnl_push_ip_header(packet, data->header, + data->header_len, &ip_tot_size); +} + +struct dp_packet * +netdev_srv6_pop_header(struct dp_packet *packet) +{ + const struct ovs_16aligned_ip6_hdr *nh = dp_packet_l3(packet); + size_t size = dp_packet_l3_size(packet) - IPV6_HEADER_LEN; + struct pkt_metadata *md = &packet->md; + struct flow_tnl *tnl = &md->tunnel; + const struct ip6_rt_hdr *rt_hdr; + uint8_t nw_proto = nh->ip6_nxt; + const void *data = nh + 1; + uint8_t nw_frag = 0; + unsigned int hlen; + + /* + * Verifies that the routing header is present in the IPv6 + * extension headers and that its type is SRv6. + * */ + if (!parse_ipv6_ext_hdrs(&data, &size, &nw_proto, &nw_frag, + NULL, &rt_hdr)) { + goto err; + } + + if (!rt_hdr) { + goto err; + } + + if (rt_hdr->type != IPV6_SRCRT_TYPE_4) { + goto err; + } + + if (rt_hdr->segments_left > 0) { + VLOG_WARN_RL(&err_rl, "invalid srv6 segments_left=%d\n", + rt_hdr->segments_left); + goto err; + } + + if (rt_hdr->nexthdr == IPPROTO_IPIP) { + packet->packet_type = htonl(PT_IPV4); + } else if (rt_hdr->nexthdr == IPPROTO_IPV6) { + packet->packet_type = htonl(PT_IPV6); + } else { + goto err; + } + + pkt_metadata_init_tnl(md); + netdev_tnl_ip_extract_tnl_md(packet, tnl, &hlen); + dp_packet_reset_packet(packet, hlen); + + return packet; +err: + dp_packet_delete(packet); + return NULL; +} + struct dp_packet * netdev_vxlan_pop_header(struct dp_packet *packet) { diff --git a/lib/netdev-native-tnl.h b/lib/netdev-native-tnl.h index 22ae2ce5369b..07dae27973e6 100644 --- a/lib/netdev-native-tnl.h +++ b/lib/netdev-native-tnl.h @@ -65,6 +65,16 @@ netdev_gtpu_build_header(const struct netdev *netdev, struct ovs_action_push_tnl *data, const struct netdev_tnl_build_header_params *p); +struct dp_packet *netdev_srv6_pop_header(struct dp_packet *packet); + +void netdev_srv6_push_header(const struct netdev *netdev, + struct dp_packet *packet, + const struct ovs_action_push_tnl *data); + +int netdev_srv6_build_header(const struct netdev *netdev, + struct ovs_action_push_tnl *data, + const struct netdev_tnl_build_header_params *p); + void netdev_tnl_push_udp_header(const struct netdev *netdev, struct dp_packet *packet, diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c index 3b39278650d3..663ee8606c3b 100644 --- a/lib/netdev-vport.c +++ b/lib/netdev-vport.c @@ -424,6 +424,35 @@ parse_tunnel_ip(const char *value, bool accept_mcast, bool *flow, return 0; } +static int +parse_srv6_segs(char *s, struct in6_addr *segs, uint8_t *num_segs) +{ + char *save_ptr = NULL; + char *token; + + if (!s) { + return EINVAL; + } + + *num_segs = 0; + + while ((token = strtok_r(s, ",", &save_ptr)) != NULL) { + if (*num_segs == SRV6_MAX_SEGS) { + return EINVAL; + } + + if (inet_pton(AF_INET6, token, segs) != 1) { + return EINVAL; + } + + segs++; + (*num_segs)++; + s = NULL; + } + + return 0; +} + enum tunnel_layers { TNL_L2 = 1 << 0, /* 1 if a tunnel type can carry Ethernet traffic. */ TNL_L3 = 1 << 1 /* 1 if a tunnel type can carry L3 traffic. */ @@ -443,6 +472,8 @@ tunnel_supported_layers(const char *type, return TNL_L3; } else if (!strcmp(type, "bareudp")) { return TNL_L3; + } else if (!strcmp(type, "srv6")) { + return TNL_L3; } else { return TNL_L2; } @@ -750,6 +781,17 @@ set_tunnel_config(struct netdev *dev_, const struct smap *args, char **errp) goto out; } } + } else if (!strcmp(node->key, "srv6_segs")) { + err = parse_srv6_segs(node->value, + tnl_cfg.srv6_segs, + &tnl_cfg.srv6_num_segs); + + switch (err) { + case EINVAL: + ds_put_format(&errors, "%s: bad %s 'srv6_segs'\n", + name, node->value); + break; + } } else if (!strcmp(node->key, "payload_type")) { if (!strcmp(node->value, "mpls")) { tnl_cfg.payload_ethertype = htons(ETH_TYPE_MPLS); @@ -1290,6 +1332,17 @@ netdev_vport_tunnel_register(void) }, {{NULL, NULL, 0, 0}} }, + { "srv6_sys", + { + TUNNEL_FUNCTIONS_COMMON, + .type = "srv6", + .build_header = netdev_srv6_build_header, + .push_header = netdev_srv6_push_header, + .pop_header = netdev_srv6_pop_header, + .get_ifindex = NETDEV_VPORT_GET_IFINDEX, + }, + {{NULL, NULL, 0, 0}} + }, }; static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER; diff --git a/lib/netdev.h b/lib/netdev.h index acf174927d24..ff207f56c28c 100644 --- a/lib/netdev.h +++ b/lib/netdev.h @@ -140,6 +140,10 @@ struct netdev_tunnel_config { bool erspan_idx_flow; bool erspan_dir_flow; bool erspan_hwid_flow; + + uint8_t srv6_num_segs; + #define SRV6_MAX_SEGS 6 + struct in6_addr srv6_segs[SRV6_MAX_SEGS]; }; void netdev_run(void); diff --git a/lib/packets.h b/lib/packets.h index 70cd072228ae..7b39b3380f3c 100644 --- a/lib/packets.h +++ b/lib/packets.h @@ -1523,6 +1523,17 @@ BUILD_ASSERT_DECL(sizeof(struct vxlanhdr) == 8); #define VXLAN_F_GPE 0x4000 #define VXLAN_HF_GPE 0x04000000 +/* SRv6 protocol header */ +#define IPV6_SRCRT_TYPE_4 4 +#define SRV6_BASE_HDR_LEN 8 +struct srv6_base_hdr { + struct ip6_rt_hdr rt_hdr; + uint8_t last_entry; + uint8_t flags; + ovs_be16 tag; +}; +BUILD_ASSERT_DECL(sizeof(struct srv6_base_hdr) == SRV6_BASE_HDR_LEN); + /* Input values for PACKET_TYPE macros have to be in host byte order. * The _BE postfix indicates result is in network byte order. Otherwise result * is in host byte order. */ diff --git a/lib/tnl-ports.c b/lib/tnl-ports.c index 3948bc10e6b0..7e98225d0fa2 100644 --- a/lib/tnl-ports.c +++ b/lib/tnl-ports.c @@ -126,7 +126,7 @@ map_insert(odp_port_t port, struct eth_addr mac, struct in6_addr *addr, /* XXX: No fragments support. */ match.wc.masks.nw_frag = FLOW_NW_FRAG_MASK; - /* 'tp_port' is zero for GRE tunnels. In this case it + /* 'tp_port' is zero for GRE and SRv6 tunnels. In this case it * doesn't make sense to match on UDP port numbers. */ if (tp_port) { match.wc.masks.tp_dst = OVS_BE16_MAX; @@ -178,6 +178,10 @@ tnl_type_to_nw_proto(const char type[], uint8_t nw_protos[2]) nw_protos[0] = IPPROTO_IPIP; nw_protos[1] = IPPROTO_IPV6; } + if (!strcmp(type, "srv6")) { + nw_protos[0] = IPPROTO_IPIP; + nw_protos[1] = IPPROTO_IPV6; + } } static void diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index a9cf3cbee0be..15c814d6285b 100644 --- a/ofproto/ofproto-dpif-xlate.c +++ b/ofproto/ofproto-dpif-xlate.c @@ -3632,6 +3632,9 @@ propagate_tunnel_data_to_flow(struct xlate_ctx *ctx, struct eth_addr dmac, case OVS_VPORT_TYPE_BAREUDP: nw_proto = IPPROTO_UDP; break; + case OVS_VPORT_TYPE_SRV6: + nw_proto = IPPROTO_IPIP; + break; case OVS_VPORT_TYPE_LISP: case OVS_VPORT_TYPE_STT: case OVS_VPORT_TYPE_UNSPEC: diff --git a/tests/system-kmod-macros.at b/tests/system-kmod-macros.at index 822a80618d6f..fb15a5a7ce03 100644 --- a/tests/system-kmod-macros.at +++ b/tests/system-kmod-macros.at @@ -202,6 +202,14 @@ m4_define([OVS_CHECK_KERNEL_EXCL], AT_SKIP_IF([ ! ( test $version -lt $1 || ( test $version -eq $1 && test $sublevel -lt $2 ) || test $version -gt $3 || ( test $version -eq $3 && test $sublevel -gt $4 ) ) ]) ]) +# OVS_CHECK_SRV6() +# +# The kernel datapath does not support this feature. +m4_define([OVS_CHECK_SRV6], +[ + AT_SKIP_IF([:]) +]) + # CHECK_LATER_IPV6_FRAGMENTS() # # Upstream kernels beetween 4.20 and 5.19 are not parsing IPv6 fragments diff --git a/tests/system-traffic.at b/tests/system-traffic.at index 39a48175271e..65bae736f00e 100644 --- a/tests/system-traffic.at +++ b/tests/system-traffic.at @@ -1164,6 +1164,125 @@ OVS_WAIT_UNTIL([cat p0.pcap | grep -E "IP6 fc00:100::100 > fc00:100::1: GREv0, . OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP +AT_SETUP([datapath - ping over srv6 tunnel]) +OVS_CHECK_TUNNEL_TSO() +OVS_CHECK_SRV6() + +OVS_TRAFFIC_VSWITCHD_START() + +ADD_NAMESPACES(at_ns0) +ADD_NAMESPACES(at_ns1) +NS_EXEC([at_ns0], [sysctl -w net.ipv6.conf.default.seg6_enabled=1]) +NS_EXEC([at_ns0], [sysctl -w net.ipv4.conf.default.forwarding=1]) +NS_EXEC([at_ns0], [sysctl -w net.ipv6.conf.default.forwarding=1]) +NS_EXEC([at_ns0], [sysctl -w net.ipv6.conf.all.seg6_enabled=1]) +NS_EXEC([at_ns0], [sysctl -w net.ipv4.conf.all.forwarding=1]) +NS_EXEC([at_ns0], [sysctl -w net.ipv6.conf.all.forwarding=1]) + +dnl Set up underlay link from host into the namespace 'at_ns0' +dnl using veth pair. Kernel side tunnel endpoint (SID) is +dnl 'fc00:a::1/128', so add it to the route. +ADD_BR([br-underlay]) +ADD_VETH(p0, at_ns0, br-underlay, "fc00::1/64", [], [], "nodad") +AT_CHECK([ovs-ofctl add-flow br-underlay "actions=normal"]) +AT_CHECK([ip addr add dev br-underlay "fc00::100/64" nodad]) +AT_CHECK([ip link set dev br-underlay up]) +AT_CHECK([ip route add fc00:a::1/128 dev br-underlay via fc00::1]) + +dnl Set up tunnel endpoints on OVS outside the namespace. +ADD_OVS_TUNNEL6([srv6], [br0], [at_srv6], [fc00:a::1], [10.100.100.100/24]) +AT_CHECK([ovs-vsctl set bridge br0 other_config:hwaddr=aa:55:aa:55:00:00]) +AT_CHECK([ip route add 10.1.1.0/24 dev br0 via 10.100.100.1]) +AT_CHECK([arp -s 10.100.100.1 aa:55:aa:55:00:01]) +AT_CHECK([ovs-ofctl add-flow br0 in_port=LOCAL,actions=output:at_srv6]) +AT_CHECK([ovs-ofctl add-flow br0 in_port=at_srv6,actions=mod_dl_dst:aa:55:aa:55:00:00,output:LOCAL]) + +dnl Set up tunnel endpoints on the namespace 'at_ns0', +dnl and overlay port on the namespace 'at_ns1' +ADD_VETH_NS([at_ns0], [veth0], [10.1.1.2/24], [at_ns1], [veth1], [10.1.1.1/24]) +NS_CHECK_EXEC([at_ns0], [ip sr tunsrc set fc00:a::1]) +NS_CHECK_EXEC([at_ns0], [ip route add 10.100.100.0/24 encap seg6 mode encap segs fc00::100 dev p0]) +NS_CHECK_EXEC([at_ns0], [ip -6 route add fc00:a::1 encap seg6local action End.DX4 nh4 0.0.0.0 dev veth0]) +NS_CHECK_EXEC([at_ns1], [ip route add 10.100.100.0/24 via 10.1.1.2 dev veth1]) + +dnl Linux seems to take a little time to get its IPv6 stack in order. Without +dnl waiting, we get occasional failures due to the following error: +dnl "connect: Cannot assign requested address" +OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 1 fc00::100]) + +dnl First, check the underlay. +NS_CHECK_EXEC([at_ns0], [ping6 -q -c 3 -i 0.3 -w 2 fc00::100 | FORMAT_PING], [0], [dnl +3 packets transmitted, 3 received, 0% packet loss, time 0ms +]) + +dnl Okay, now check the overlay. +NS_CHECK_EXEC([at_ns1], [ping -q -c 3 -i 0.3 -w 2 10.100.100.100 | FORMAT_PING], [0], [dnl +3 packets transmitted, 3 received, 0% packet loss, time 0ms +]) + +OVS_TRAFFIC_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([datapath - ping6 over srv6 tunnel]) +OVS_CHECK_TUNNEL_TSO() +OVS_CHECK_SRV6() + +OVS_TRAFFIC_VSWITCHD_START() + +ADD_NAMESPACES(at_ns0) +ADD_NAMESPACES(at_ns1) +NS_EXEC([at_ns0], [sysctl -w net.ipv6.conf.default.seg6_enabled=1]) +NS_EXEC([at_ns0], [sysctl -w net.ipv6.conf.default.forwarding=1]) +NS_EXEC([at_ns0], [sysctl -w net.ipv6.conf.all.seg6_enabled=1]) +NS_EXEC([at_ns0], [sysctl -w net.ipv6.conf.all.forwarding=1]) + +dnl Set up underlay link from host into the namespace 'at_ns0' +dnl using veth pair. Kernel side tunnel endpoint (SID) is +dnl 'fc00:a::1/128', so add it to the route. +ADD_BR([br-underlay]) +ADD_VETH(p0, at_ns0, br-underlay, "fc00::1/64", [], [], "nodad") +AT_CHECK([ovs-ofctl add-flow br-underlay "actions=normal"]) +AT_CHECK([ip addr add dev br-underlay "fc00::100/64" nodad]) +AT_CHECK([ip link set dev br-underlay up]) +AT_CHECK([ip -6 route add fc00:a::1/128 dev br-underlay via fc00::1]) + +dnl Set up tunnel endpoints on OVS outside the namespace. +ADD_OVS_TUNNEL6([srv6], [br0], [at_srv6], [fc00:a::1], [fc00:100::100/64]) +AT_CHECK([ovs-vsctl set bridge br0 other_config:hwaddr=aa:55:aa:55:00:00]) +dnl [sleep infinity] +AT_CHECK([ip addr add dev br0 fc00:100::100/64]) +AT_CHECK([ip -6 route add fc00:1::1/128 dev br0 via fc00:100::1]) +AT_CHECK([ip -6 neigh add fc00:100::1 lladdr aa:55:aa:55:00:01 dev br0]) +AT_CHECK([ovs-ofctl add-flow br0 in_port=LOCAL,actions=output:at_srv6]) +AT_CHECK([ovs-ofctl add-flow br0 in_port=at_srv6,actions=mod_dl_dst:aa:55:aa:55:00:00,output:LOCAL]) + +dnl Set up tunnel endpoints on the namespace 'at_ns0', +dnl and overlay port on the namespace 'at_ns1' +ADD_VETH_NS([at_ns0], [veth0], [fc00:1::2/64], [at_ns1], [veth1], [fc00:1::1/64]) +NS_CHECK_EXEC([at_ns0], [ip sr tunsrc set fc00:a::1]) +NS_CHECK_EXEC([at_ns0], [ip -6 route add fc00:100::0/64 encap seg6 mode encap segs fc00::100 dev p0]) +NS_CHECK_EXEC([at_ns0], [ip -6 route add fc00:a::1 encap seg6local action End.DX6 nh6 :: dev veth0]) +NS_CHECK_EXEC([at_ns1], [ip -6 route add fc00:100::/64 via fc00:1::2 dev veth1]) + +dnl Linux seems to take a little time to get its IPv6 stack in order. Without +dnl waiting, we get occasional failures due to the following error: +dnl "connect: Cannot assign requested address" +OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 1 fc00::100]) +OVS_WAIT_UNTIL([ip netns exec at_ns1 ping6 -c 1 fc00:100::100]) + +dnl First, check the underlay. +NS_CHECK_EXEC([at_ns0], [ping6 -q -c 3 -i 0.3 -w 2 fc00::100 | FORMAT_PING], [0], [dnl +3 packets transmitted, 3 received, 0% packet loss, time 0ms +]) + +dnl Okay, now check the overlay. +NS_CHECK_EXEC([at_ns1], [ping6 -q -c 3 -i 0.3 -w 2 fc00:100::100 | FORMAT_PING], [0], [dnl +3 packets transmitted, 3 received, 0% packet loss, time 0ms +]) + +OVS_TRAFFIC_VSWITCHD_STOP +AT_CLEANUP + AT_SETUP([datapath - clone action]) OVS_TRAFFIC_VSWITCHD_START() diff --git a/tests/system-userspace-macros.at b/tests/system-userspace-macros.at index 610fa2e94ae8..482079386a43 100644 --- a/tests/system-userspace-macros.at +++ b/tests/system-userspace-macros.at @@ -301,6 +301,12 @@ m4_define([OVS_CHECK_KERNEL_EXCL], AT_SKIP_IF([:]) ]) +# OVS_CHECK_SRV6() +m4_define([OVS_CHECK_SRV6], + [AT_SKIP_IF([! ip -6 route add fc00::1/96 encap seg6 mode encap dev lo 2>&1 >/dev/null]) + AT_CHECK([ip -6 route del fc00::1/96 2>&1 >/dev/null]) + OVS_CHECK_FIREWALL()]) + # CHECK_LATER_IPV6_FRAGMENTS() # # Userspace is parsing later IPv6 fragments correctly. diff --git a/tests/tunnel.at b/tests/tunnel.at index 78cc3f3e99a6..ddeb66bc9fb7 100644 --- a/tests/tunnel.at +++ b/tests/tunnel.at @@ -1223,3 +1223,59 @@ AT_CHECK([ovs-vsctl add-port br0 p1 -- set int p1 type=dummy]) OVS_APP_EXIT_AND_WAIT([ovs-vswitchd]) OVS_APP_EXIT_AND_WAIT([ovsdb-server])] AT_CLEANUP + +AT_SETUP([tunnel - SRV6 basic]) +OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy \ + ofport_request=1 \ + -- add-port br0 p2 -- set Interface p2 type=srv6 \ + options:remote_ip=flow \ + ofport_request=2]) +OVS_VSWITCHD_DISABLE_TUNNEL_PUSH_POP + +dnl First setup dummy interface IP address, then add the route +dnl so that tnl-port table can get valid IP address for the device. +AT_CHECK([ovs-appctl netdev-dummy/ip6addr br0 fc00::1/64], [0], [OK +]) +AT_CHECK([ovs-appctl ovs/route/add fc00::0/64 br0], [0], [OK +]) +AT_CHECK([ovs-appctl ovs/route/show], [0], [dnl +Route Table: +User: fc00::/64 dev br0 SRC fc00::1 +]) + +AT_DATA([flows.txt], [dnl +in_port=1,actions=set_field:fc00::2->tun_ipv6_dst,output:2 +in_port=2,actions=1 +]) +AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) + +AT_CHECK([ovs-appctl dpif/show | tail -n +3], [0], [dnl + br0 65534/100: (dummy-internal) + p1 1/1: (dummy) + p2 2/6: (srv6: remote_ip=flow) +]) + +AT_CHECK([ovs-appctl tnl/ports/show |sort], [0], [dnl +Listening ports: +srv6_sys (6) ref_cnt=1 +srv6_sys (6) ref_cnt=1 +]) + +AT_CHECK([ovs-appctl ofproto/list-tunnels], [0], [dnl +port 6: p2 (srv6: ::->flow, key=0, legacy_l3, dp port=6, ttl=64) +]) + +dnl Encap: ipv4 inner packet +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=4,ttl=128,frag=no),tcp(src=8,dst=9)'], [0], [stdout]) +AT_CHECK([tail -1 stdout], [0], + [Datapath actions: set(tunnel(ipv6_dst=fc00::2,ttl=64,flags(df))),pop_eth,6 +]) + +dnl Encap: ipv6 inner packet +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=2001:cafe::92,dst=2001:cafe::88,label=0,proto=47,tclass=0x0,hlimit=64)'], [0], [stdout]) +AT_CHECK([tail -1 stdout], [0], + [Datapath actions: set(tunnel(ipv6_dst=fc00::2,ttl=64,flags(df))),pop_eth,6 +]) + +OVS_VSWITCHD_STOP +AT_CLEANUP From patchwork Fri Mar 24 10:05:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nobuhiro MIKI X-Patchwork-Id: 1760702 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.133; helo=smtp2.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=f+vo80QJ; dkim-atps=neutral Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4PjdCG4w89z1yYB for ; Fri, 24 Mar 2023 21:06:18 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id E442141DEB; Fri, 24 Mar 2023 10:06:12 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org E442141DEB Authentication-Results: smtp2.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key, unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=f+vo80QJ X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id OfPelCfxc1Ui; Fri, 24 Mar 2023 10:06:08 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp2.osuosl.org (Postfix) with ESMTPS id 16F5D41DF6; Fri, 24 Mar 2023 10:06:06 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 16F5D41DF6 Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id A78E8C008F; Fri, 24 Mar 2023 10:06:02 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id B5418C0090 for ; Fri, 24 Mar 2023 10:05:58 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 828A2840E6 for ; Fri, 24 Mar 2023 10:05:58 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 828A2840E6 Authentication-Results: smtp1.osuosl.org; dkim=pass (1024-bit key, unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=f+vo80QJ X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id YnntoateMDG7 for ; Fri, 24 Mar 2023 10:05:57 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 4117D840E1 Received: from corp-ob09.yahoo-corp.jp (corp-ob09.yahoo-corp.jp [182.22.125.216]) by smtp1.osuosl.org (Postfix) with ESMTPS id 4117D840E1 for ; Fri, 24 Mar 2023 10:05:56 +0000 (UTC) Received: from JPN01-TYC-obe.outbound.protection.outlook.com (mail-tycjpn01lp2171.outbound.protection.outlook.com [104.47.23.171]) by corp-ob09.yahoo-corp.jp (Postfix) with ESMTPS id 0CF0119FB184 for ; Fri, 24 Mar 2023 19:05:55 +0900 (JST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mUuKo+jy5H2uODQ7Ane0jeyZvNiqVyz7necZ2Z83y0Hz4L+p2rX9aUJMix/ekqrRG2qZvWZa13kutdGgdPDpNzmb08//mQzVU3Jh/9a3VUeMzd45bOpts+gleiaHfVfBRJ4KF/rQjy+TmbiBXOXsxzodg+KRtWTE1yubQ/KA66NhLn7W0zgTzJF1wZVpfbYcPuUgb4xGtkzLgVolrJC5llc8dt2CZkhax1Em2f69rC4Wgs0v1MaNcFMQm21Ropn3Z4WSDZmutzYlaZT2CgOHwJV0GCM7+aE/ExqSpCMre+P1bwDTbLlfRkTBHwgo13JaWVQxTnrgzLnKoOEg0o2geQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=UCbwrs5oXq1OeT1l6zFqECRhA4ofWY/d6Pg2sliZFcQ=; b=DzK5NJRbCuc1CtNS8LD07d17wgA6OfBTCI6C4i+IvFaUoTYhX4tD/jTuBQGaiE2HcFyfd3LeTy6FeeajePkzRIZs053ECHKth+mMetxrTfmxWg3TLStCG8Q7D0slVpjRpZMZiD08ycL/Qfor/sqa5xNr+xkAFTzkwkjtIR5Z6zEzehE0Uy6yGg7z3HTbN2kO2LKq8R+DJ6x4y8HpEej0gFVL6JWQGlHBn1vfBpG47T98USOso1ef+CbKaWmxih62TV7BIw9qpg6QKyUdG222zTrwfQStXJmuGdkA8BaBEN8VgmPXmI0w6CyVXaoVMqBAlbtgsnLEGcAMDKpe0/PU9w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=yahoo-corp.jp; dmarc=pass action=none header.from=yahoo-corp.jp; dkim=pass header.d=yahoo-corp.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo-corp.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UCbwrs5oXq1OeT1l6zFqECRhA4ofWY/d6Pg2sliZFcQ=; b=f+vo80QJtdPo1ku9mkLWHmC+0b2BDT3mv8psHRu0HcJYzv5JyjPJtDgP04BQ7DrhiQ+dppDtyTIIb0V2VNsCG6omlBU5oAAosqaYfAg6ZOOO9CTmVYWmEA3NUq5v6t1gyX2ykI6JhqZTdK0V71obPqND0A30WdH87G6pCDa0+NY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=yahoo-corp.jp; Received: from TY2PR01MB4107.jpnprd01.prod.outlook.com (2603:1096:404:d8::23) by TYCPR01MB8376.jpnprd01.prod.outlook.com (2603:1096:400:150::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.38; Fri, 24 Mar 2023 10:05:53 +0000 Received: from TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::61fe:e4c3:a819:6ce6]) by TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::61fe:e4c3:a819:6ce6%7]) with mapi id 15.20.6178.038; Fri, 24 Mar 2023 10:05:53 +0000 From: Nobuhiro MIKI To: dev@openvswitch.org Date: Fri, 24 Mar 2023 19:05:38 +0900 Message-Id: <20230324100538.70290-6-nmiki@yahoo-corp.jp> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20230324100538.70290-1-nmiki@yahoo-corp.jp> References: <20230324100538.70290-1-nmiki@yahoo-corp.jp> X-ClientProxiedBy: TYAPR01CA0125.jpnprd01.prod.outlook.com (2603:1096:404:2d::17) To TY2PR01MB4107.jpnprd01.prod.outlook.com (2603:1096:404:d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PR01MB4107:EE_|TYCPR01MB8376:EE_ X-MS-Office365-Filtering-Correlation-Id: df0499d1-3494-47cc-13ee-08db2c4f5a8e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: bwk6Q9V3r2c3UpzY9uIJnSbqvRNLvL0YK8I5NO1Eutl9M1hakmFOGthAUR+gVvM/nxfXZ2QBZmncPxewX44B2hRZeBgJFrdNSOTQ/UqX3CQaRTNH4IHaupPsiY7l7YXKbVTm023g+WT/0TutFGSgvi7A8Gb70b4Znc7mGiqlfdFKRpc31QaU+2qN3YFd1x37l4ARyC0CJ4Dwlsdgbd59MWHoeIBdY9GTJn2NC5tMUQIYVQg5oQA3HpediT2Ta5j7fYrHFf3+OjughXXdAJaRTiItBMR/cdQEALPQQrRSJSHGNWYAihsadlu1aKg+No4tm1xQ1Nk3et66a919kWNOfE1FBHJOT8YrFT+Zq8wMwmWUvqD0qesxaJywbsLQi6XnTxboq5cmxyd8lZOPrVb5+ZlSQFzwJPMn+dsHHTUAIshKeJNpDAvIdlmFbgNIl8SwjeSdnVZFLkXfsjMJ54iZUOzSaUOg/qndBTvhuxtJMJECsWo3ZZpqvweNwr0+T+S+it1GPhmlF1bzE2hv7eW2Gkzqxd+ysIjnEeuxFRMv9772DuifAwYuLw5idJOzZjsTr/dMabBYm+yElfWIMHonTyrOnhpDAYilb1gGC3Z1433aFth8Nined4iO7G2YxM0GcgYnBDzuampXtA8BbTPDxME55lugZflVR9Ae3x5Cgb8GTEnpiFUJheWpJhZfjRQ4yjZaT2xxzCvl8/XIeHU10A== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TY2PR01MB4107.jpnprd01.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(4636009)(39860400002)(346002)(136003)(366004)(396003)(376002)(451199018)(36756003)(66476007)(8676002)(4326008)(66556008)(66946007)(30864003)(6916009)(5660300002)(82960400001)(316002)(6512007)(6666004)(26005)(1076003)(6506007)(8936002)(41300700001)(186003)(478600001)(2616005)(6486002)(83380400001)(107886003)(52116002)(86362001)(38100700002)(38350700002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: kteN+Hd8AS/iOukuM5wyTEupZZ/M3ks/LXIyjj1fzwEoAtSXoji7Wuy+Om9QvUwrUUxjWqkKhJg/UI8K7j8aUUe7r91VSOoDt2gxFsKnKsHH3fCpbw/ik7Sl5xpMssrDKpkfSftz6eeeYc0iihQ5KXr1lyNyCcQ6hiw0rY9nQxdCgW3VLvzZyYCqn7X69BwmVI1xVvpF6zifKh37sEAr/zCxYoC1YO9O4xY205v6vkxYPShd1jgWJInzDHICN/2cdfhEhA47zj115srhTwxEU+DOspM3agr+h6myS3AF7XjG4JUH9mimhOZmvGiiAAkn+QvvmDmP2eD5bFLkeP7ZAmJGCXKW5mos/cV2kcsfTXhyxz9GLOb+AfeS92f3dI+pX+k3WoWf7fzt3cTCrsuyhlBJ6O0f41Su485EAgG5DItdkPWQ6BlOMd8MHYp4gjsq53/OxJ409iX5d2ihdPgk0xrGmYFKioSMg5VdXKJiMXjaptC+tOEXnOFGpBV9sAzYDDiXWbmlxIskmYZbC1BqI47cksdmLe8XRYNQzEbgxSeYInGYNWGindmVECqeEkY1KO99ss5nId+SyQ3I/Ab5o8YsjK1Bj9+VHaxjh9JCTo3tfHrCW4p176/v9fxQrmzJWFYV1aCgmd5DxhPwxgyvo1JLpKdOPMIwy46mazvMefHlSiXxZieeQbSKGcpevxpwQgvDbsdJTsIcUyiGckT7+J/64jmil0AqIhck4MxAPIOrHMYRUHYu44sgHbWr9Hx8tnYZ+X2WEl2xMWMRFiVDp4Z2YvIXmgqfwp+KRBaXDeJOF7rnpMFW3Mi0rlBkOYRx8DLtJzFHpF1XzOp6s7uFEyv4ILx7/xA3AnGG4V+2cnXOuCtL8/WysT86YbXQRk9mGDzou5qlK2TPhzzQKZ5rJunwj1FY1PihO8qtsVkr7JcESjya8dsZ5iz6HZPv4TS/MFmOyliQjGWJA7hF+JQ1D+4+sZUkp+K10yCUcNVR2jaOoi1u7prQy2sfEX0KH3PJch9AY+Rd0d9VUAPhJJIbjot2WQBu3vGo+ICGqDtMbnw0fBsPwQ1hVpRyjWomMLeRNI0Xc9jdMuRUC5G6igATbLP2SsUttr23Vqft3ooLcSbYcJogjWjJp0wZ82SV1an5vHm2nrhXpC4mwg1kZYJ5nyesiE+XIIyRnny0o1NrDHRRwv0O7ZXodTEKdttq0zsO15ovJrW/I2JR9prm7TC9qNxo1UwCQhanqlVrw9Vrfu8w3fkJ+lJCI9tF2X6S201Nqthyb2/s34f+mv1Y4Mn2aVmEvq3EQhjeIdAiZTUmICWciYA/mSAm9UXYWx80MrbzIK271sq6qi1dDpH5/xqNvPdlZNFrKlX6uFmfXocsuHxsWGtDdnBEJsks8QjglFjjroY0J8iStaW+RGe++vHOfJagKClhAXfbJkEzVWFlUlwjiCrDV5aEOA3iKTWN1Z8pZcTyq4vpkLrr41WNYM/5JqahU8jMMZ+RikxFPZgynPuojAS0L5G0u3JO1lRqklOJqj/4KvQDtRemG1TyVUlPGH0WrOrrtfiOq3llNI5cQzKHtZEIBQyKAswYVaN9R+rJ X-OriginatorOrg: yahoo-corp.jp X-MS-Exchange-CrossTenant-Network-Message-Id: df0499d1-3494-47cc-13ee-08db2c4f5a8e X-MS-Exchange-CrossTenant-AuthSource: TY2PR01MB4107.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2023 10:05:53.7762 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a208d369-cd4e-4f87-b119-98eaf31df2c3 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iHCmEI+i/f4axsz/TL16wd1OIPKxlMKPYMKJ3JF01K7ytLDWV6S2RiT9M2hausGxCJw5Wwt/Fvj+HifLPd8eXg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB8376 Subject: [ovs-dev] [PATCH v10 5/5] odp: Add SRv6 tunnel actions. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" This patch adds ODP actions for SRv6 and its tests. Signed-off-by: Nobuhiro MIKI --- lib/odp-util.c | 70 +++++++++++++++++++++++++++++++++++ python/ovs/flow/odp.py | 8 ++++ python/ovs/tests/test_odp.py | 16 ++++++++ tests/odp.at | 12 +++++- tests/tunnel-push-pop-ipv6.at | 23 ++++++++++++ 5 files changed, 127 insertions(+), 2 deletions(-) diff --git a/lib/odp-util.c b/lib/odp-util.c index dbd4554d0626..2ec889c417e5 100644 --- a/lib/odp-util.c +++ b/lib/odp-util.c @@ -715,6 +715,24 @@ format_odp_tnl_push_header(struct ds *ds, struct ovs_action_push_tnl *data) } ds_put_char(ds, ')'); + } else if (data->tnl_type == OVS_VPORT_TYPE_SRV6) { + const struct srv6_base_hdr *srh; + struct in6_addr *segs; + int nr_segs; + int i; + + srh = (const struct srv6_base_hdr *) l4; + segs = ALIGNED_CAST(struct in6_addr *, srh + 1); + nr_segs = srh->last_entry + 1; + + ds_put_format(ds, "srv6("); + ds_put_format(ds, "segments_left=%d", srh->rt_hdr.segments_left); + ds_put_format(ds, ",segs("); + for (i = 0; i < nr_segs; i++) { + ds_put_format(ds, i > 0 ? "," : ""); + ipv6_format_addr(&segs[nr_segs - i - 1], ds); + } + ds_put_format(ds, "))"); } else if (data->tnl_type == OVS_VPORT_TYPE_GRE || data->tnl_type == OVS_VPORT_TYPE_IP6GRE) { const struct gre_base_hdr *greh; @@ -1534,6 +1552,7 @@ ovs_parse_tnl_push(const char *s, struct ovs_action_push_tnl *data) uint8_t hwid, dir; uint32_t teid; uint8_t gtpu_flags, gtpu_msgtype; + uint8_t segments_left; if (!ovs_scan_len(s, &n, "tnl_push(tnl_port(%"SCNi32"),", &data->tnl_port)) { return -EINVAL; @@ -1775,6 +1794,57 @@ ovs_parse_tnl_push(const char *s, struct ovs_action_push_tnl *data) tnl_type = OVS_VPORT_TYPE_GTPU; header_len = sizeof *eth + ip_len + sizeof *udp + sizeof *gtph; + } else if (ovs_scan_len(s, &n, "srv6(segments_left=%"SCNu8, + &segments_left)) { + struct srv6_base_hdr *srh = (struct srv6_base_hdr *) (ip6 + 1); + char seg_s[IPV6_SCAN_LEN + 1]; + struct in6_addr *segs; + struct in6_addr seg; + uint8_t n_segs = 0; + + if (segments_left + 1 > SRV6_MAX_SEGS) { + return -EINVAL; + } + + ip6->ip6_nxt = IPPROTO_ROUTING; + + srh->rt_hdr.hdrlen = 2 * (segments_left + 1); + srh->rt_hdr.segments_left = segments_left; + srh->rt_hdr.type = IPV6_SRCRT_TYPE_4; + srh->last_entry = segments_left; + + tnl_type = OVS_VPORT_TYPE_SRV6; + header_len = sizeof *eth + ip_len + + sizeof *srh + 8 * srh->rt_hdr.hdrlen; + /* Parse segment list. */ + if (!ovs_scan_len(s, &n, ",segs(")) { + return -EINVAL; + } + + segs = ALIGNED_CAST(struct in6_addr *, srh + 1); + segs += segments_left; + + while (ovs_scan_len(s, &n, IPV6_SCAN_FMT, seg_s) + && inet_pton(AF_INET6, seg_s, &seg) == 1) { + if (n_segs == segments_left + 1) { + return -EINVAL; + } + + memcpy(segs--, &seg, sizeof *segs); + n_segs++; + + if (s[n] == ',') { + n++; + } + } + + if (!ovs_scan_len(s, &n, ")))")) { + return -EINVAL; + } + + if (n_segs != segments_left + 1) { + return -EINVAL; + } } else { return -EINVAL; } diff --git a/python/ovs/flow/odp.py b/python/ovs/flow/odp.py index db63afc8d64d..88aee17fb2a4 100644 --- a/python/ovs/flow/odp.py +++ b/python/ovs/flow/odp.py @@ -474,6 +474,14 @@ class ODPFlow(Flow): } ) ), + "srv6": nested_kv_decoder( + KVDecoders( + { + "segments_left": decode_int, + "segs": decode_default, + } + ) + ), } ) ), diff --git a/python/ovs/tests/test_odp.py b/python/ovs/tests/test_odp.py index f8017ca8a169..a50d3185cc62 100644 --- a/python/ovs/tests/test_odp.py +++ b/python/ovs/tests/test_odp.py @@ -452,6 +452,22 @@ def test_odp_fields(input_string, expected): ), ], ), + ( + "actions:tnl_push(header(srv6(segments_left=1,segs(2001:cafe::90,2001:cafe::91))))", # noqa: E501 + [ + KeyValue( + "tnl_push", + { + "header": { + "srv6": { + "segments_left": 1, + "segs": "2001:cafe::90,2001:cafe::91", + } + } + }, + ), + ], + ), ( "actions:clone(1),clone(clone(push_vlan(vid=12,pcp=0),2),1)", [ diff --git a/tests/odp.at b/tests/odp.at index 26cda2967239..ba20604e43da 100644 --- a/tests/odp.at +++ b/tests/odp.at @@ -342,6 +342,8 @@ tnl_push(tnl_port(6),header(size=70,type=4,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:1 tnl_push(tnl_port(6),header(size=70,type=5,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,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=0x0),geneve(oam,vni=0x1c7)),out_port(1)) tnl_push(tnl_port(6),header(size=78,type=5,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,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=0x0),geneve(crit,vni=0x1c7,options({class=0xffff,type=0x80,len=4,0xa}))),out_port(1)) tnl_push(tnl_port(6),header(size=70,type=5,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,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=0x1c7)),out_port(1)) +tnl_push(tnl_port(6),header(size=78,type=112,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=43,tclass=0x0,hlimit=64),srv6(segments_left=0,segs(2001:cafe::90))),out_port(1)) +tnl_push(tnl_port(6),header(size=110,type=112,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=43,tclass=0x0,hlimit=64),srv6(segments_left=2,segs(2001:cafe::90,2001:cafe::91,2001:cafe::92))),out_port(1)) ct ct(commit) ct(commit,zone=5) @@ -400,8 +402,14 @@ AT_CLEANUP AT_SETUP([OVS datapath actions parsing and formatting - invalid forms]) dnl This caused a hang in older versions. -AT_CHECK([echo 'encap_nsh@:{@' | ovstest test-odp parse-actions -], [0], [dnl +AT_DATA([actions.txt], [dnl +encap_nsh@:{@ +tnl_push(tnl_port(6),header(size=94,type=112,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=43,tclass=0x0,hlimit=64),srv6(segments_left=2,segs(2001:cafe::90,2001:cafe::91))),out_port(1)) +tnl_push(tnl_port(6),header(size=126,type=112,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=43,tclass=0x0,hlimit=64),srv6(segments_left=2,segs(2001:cafe::90,2001:cafe::91,2001:cafe::92,2001:cafe::93))),out_port(1)) +]) +AT_CHECK_UNQUOTED([ovstest test-odp parse-actions < actions.txt], [0], [dnl +odp_actions_from_string: error +odp_actions_from_string: error odp_actions_from_string: error ]) AT_CLEANUP diff --git a/tests/tunnel-push-pop-ipv6.at b/tests/tunnel-push-pop-ipv6.at index 2cf306c67ecf..e300fe3a0d26 100644 --- a/tests/tunnel-push-pop-ipv6.at +++ b/tests/tunnel-push-pop-ipv6.at @@ -202,6 +202,8 @@ AT_CHECK([ovs-vsctl add-port int-br t2 -- set Interface t2 type=vxlan \ options:remote_ip=flow options:key=123 ofport_request=5\ -- add-port int-br t5 -- set Interface t5 type=gre \ options:remote_ip=2001:cafe::92 options:key=455 options:packet_type=legacy_l3 ofport_request=6\ + -- add-port int-br t6 -- set Interface t6 type=srv6 \ + options:remote_ip=2001:cafe::92 ofport_request=7\ ], [0]) AT_CHECK([ovs-appctl dpif/show], [0], [dnl @@ -216,12 +218,15 @@ dummy@ovs-dummy: hit:0 missed:0 t3 4/4789: (vxlan: csum=true, out_key=flow, remote_ip=2001:cafe::93) t4 5/6081: (geneve: key=123, remote_ip=flow) t5 6/3: (gre: key=455, packet_type=legacy_l3, remote_ip=2001:cafe::92) + t6 7/6: (srv6: remote_ip=2001:cafe::92) ]) AT_CHECK([ovs-appctl tnl/ports/show |sort], [0], [dnl Listening ports: genev_sys_6081 (6081) ref_cnt=1 gre_sys (3) ref_cnt=2 +srv6_sys (6) ref_cnt=1 +srv6_sys (6) ref_cnt=1 vxlan_sys_4789 (4789) ref_cnt=2 ]) @@ -363,6 +368,8 @@ AT_CHECK([ovs-appctl tnl/ports/show |sort], [0], [dnl Listening ports: genev_sys_6081 (6081) ref_cnt=1 gre_sys (3) ref_cnt=2 +srv6_sys (6) ref_cnt=1 +srv6_sys (6) ref_cnt=1 vxlan_sys_4789 (4789) ref_cnt=2 ]) @@ -384,6 +391,12 @@ AT_CHECK([tail -1 stdout], [0], [Datapath actions: tnl_pop(6081) ]) +dnl Check SRv6 tunnel pop +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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=4,tclass=0x0,hlimit=64)'], [0], [stdout]) +AT_CHECK([tail -1 stdout], [0], + [Datapath actions: tnl_pop(6) +]) + 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]) @@ -405,6 +418,13 @@ AT_CHECK([tail -1 stdout], [0], [Datapath actions: tnl_push(tnl_port(3),header(size=62,type=109,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 SRv6 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(6),header(size=78,type=112,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=43,tclass=0x0,hlimit=64),srv6(segments_left=0,segs(2001:cafe::92))),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]) @@ -510,6 +530,8 @@ AT_CHECK([ovs-appctl tnl/ports/show |sort], [0], [dnl Listening ports: genev_sys_6081 (6081) ref_cnt=1 gre_sys (3) ref_cnt=1 +srv6_sys (6) ref_cnt=1 +srv6_sys (6) ref_cnt=1 vxlan_sys_4789 (4789) ref_cnt=1 vxlan_sys_4790 (4790) ref_cnt=1 ]) @@ -518,6 +540,7 @@ AT_CHECK([ovs-vsctl del-port int-br t1 \ -- del-port int-br t2 \ -- del-port int-br t4 \ -- del-port int-br t5 \ + -- del-port int-br t6 \ ], [0]) dnl Check tunnel lookup entries after deleting all remaining tunnel ports